懒癌晚期学图论的时候自己用C语言写了个求可达性矩阵的算法~
可达性矩阵算法~
直接上代码
#include <iostream>
#include <cstring>
using namespace std;
#define n 5
void print(int a[n][n]);
void print1(int a[n][n]);
void multiply(int a[n][n],int b[n][n],int c[n][n]);
void add(int a[n][n],int b[n][n]);
int main(){
int a[n][n],b[n][n],c[n][n],d[n][n];
for(int i = 0;i<n;++i){
for(int j = 0;j<n;++j){
cin>>a[i][j];
b[i][j] = a[i][j];
d[i][j] = a[i][j];
}
}cout<<"A:"<<endl;
print(a);
for(int i = 0;i<n-1;i++){
cout<<"A"<<i+2<<":"<<endl;
if(i%2){
memset(a,0,sizeof(a));
multiply(c,b,a);
add(d,a);
print(a);
}else{
memset(c,false,sizeof(c));
multiply(a,b,c);
add(d,c);
print(c);
}
}
cout<<"R:"<<endl;
print(d);
cout<<"P:"<<endl;
print1(d);
}
void multiply(int a[n][n],int b[n][n],int c[n][n]){
for(int i = 0;i<n;++i){
for(int j = 0;j<n;++j){
for(int k = 0;k<n;++k){
c[i][j] = c[i][j]+(a[i][k]*b[k][j]);
}
}
}
}void print(int a[n][n]){
for(int i = 0;i<n;++i){
for(int j = 0;j<n;++j){
cout<<a[i][j]<<(j<n-1?" ":"");
}cout<<endl;
}
}
void add(int a[n][n],int b[n][n]){
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
a[i][j]=a[i][j]+b[i][j];
}
}
}void print1(int a[n][n]){
for(int i = 0;i<n;++i){
for(int j = 0;j<n;++j){
cout<<(a[i][j]?1:0)<<(j<n-1?" ":"");
}cout<<endl;
}
}
结果图
布尔型
#include <iostream>
#include <cstring>
using namespace std;
#define n 5
void print(bool a[n][n]);
void multiply(bool a[n][n],bool b[n][n],bool c[n][n]);
void add(bool a[n][n],bool b[n][n]);
int main(){
bool a[n][n],b[n][n],c[n][n],d[n][n];
for(int i = 0;i<n;++i){
for(int j = 0;j<n;++j){
cin>>a[i][j];
b[i][j] = a[i][j];
d[i][j] = a[i][j];
}
}cout<<"A:"<<endl;
print(a);
for(int i = 0;i<n-1;i++){
cout<<"A"<<i+2<<":"<<endl;
if(i%2){
memset(a,false,sizeof(a));
multiply(c,b,a);
add(d,a);
print(a);
}else{
memset(c,false,sizeof(c));
multiply(a,b,c);
add(d,c);
print(c);
}
}
cout<<"P:"<<endl;
print(d);
}
void multiply(bool a[n][n],bool b[n][n],bool c[n][n]){
for(int i = 0;i<n;++i){
for(int j = 0;j<n;++j){
for(int k = 0;k<n;++k){
c[i][j] = c[i][j]||(a[i][k]&&b[k][j]);
}
}
}
}void print(bool a[n][n]){
for(int i = 0;i<n;++i){
for(int j = 0;j<n;++j){
cout<<a[i][j]<<(j<n-1?" ":"");
}cout<<endl;
}
}
void add(bool a[n][n],bool b[n][n]){
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
a[i][j]=a[i][j]||b[i][j];
}
}
}
其实就是把乘和加的地方改一改就好了!
懒癌晚期学图论的时候自己用C语言写了个求可达性矩阵的算法~的更多相关文章
- UESTC_小panpan学图论 2015 UESTC Training for Graph Theory<Problem J>
J - 小panpan学图论 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) S ...
- 【JZOJ6389】小w学图论
description 小w这学期选了门图论课,他在学习点着色的知识.他现在得到了一张无向图,并希望在这张图上使用最多n种颜色给每个节点染色,使得任意一条边关联的两个节点颜色不同. 小w获得一张n个节 ...
- ACM: meixiuxiu学图论-并查集-最小生成树-解题报告
/* 最小生成树,最小环的最大权值按照排序后去构建最小生成树就可以了,注意遇到的第一个根相同的点就记录权值,跳出,生成的环就是最小权值环. */ //AC代码: #include"iostr ...
- [CodeChef]GERALD07/[JZOJ4739]Ztxz16学图论
题解: 考虑从小到大枚举右端点 对于每个点,令它的权值等于它的编号 那么我们可以用lct维护出一颗最大生成树 维护方法是每次插入一条判断他们在不在一颗树上 若不在直接加,若在就找到链上的最小值 之后看 ...
- 6389. 【NOIP2019模拟2019.10.26】小w学图论
题目描述 题解 之前做过一次 假设图建好了,设g[i]表示i->j(i<j)的个数 那么ans=∏(n-g[i]),因为连出去的必定会构成一个完全图,颜色互不相同 从n~1染色,点i的方案 ...
- Tarjan在图论中的应用(二)——用Tarjan来求割点与割边
前言:\(Tarjan\) 求割点和割边建立在 \(Tarjan\)算法的基础之上,因此建议在看这篇博客之前先去学一学\(Tarjan\). 回顾\(Tarjan\)中各个数组的定义 首先,我们来回顾 ...
- 学一学书里的django是怎么写views.py的
他山之石,可以攻玉嘛. 好的习惯有时也是学别人来养成的. 外国人的编码习惯,学啊. from django.core.urlresolvers import reverse_lazy from dja ...
- 从零开始学编程_第A001期_C语言HelloWorld详解
emmm,这是我的第一篇博客. 作为一个软件工程专业的学生,我希望自己能在编程方面有不错的成就,我们老师告诉我们学编程就要写博客,在写博客的过程中不断成长,结交朋友,所以我就开始尝试写专业相关的博客. ...
- 为什么大部分的程序员学编程,都会选择从C语言开始?
软件行业经过几十年的发展,编程语言的种类已经越来越多了,而且很多新的编程语言已经在这个领域从开始的默默无闻到如今风风火火,整个编程语言朝着集成化方向发展,这样会导致很多的初学者选择上不像以前那么单一了 ...
随机推荐
- sql server 变量 字符串拼接
参考:SQL server中null+字符串,isnull以及把查询结果赋给一个字符变量组成另一个查询语句 1.开始定义的字符串都为null.例如:declare @sql,那么@sql就是null ...
- Sql Server 查询重复记录
参考网址:http://database.51cto.com/art/201103/250046.htm SQL Server数据库多种方式查找重复记录 select * from dbo.T0058 ...
- 无线 WIFI 的13个信道频率范围(转载)
转自:http://cnzhx.net/blog/13-channels-of-wifi/ 目前主流的无线WIFI网络设备不管是802.11b/g还是802.11b/g/n 一般都支持13个信道.它们 ...
- Mybatis的全局配置文件标签介绍(mybatis-config.xml)
全局配置文件中本人只记录了常用的几个 typeHandlers, objectFactory,objectWrapperFactory, reflectorFactory, plugins, dat ...
- IDEA3.5最新版激活码
https://blog.csdn.net/zty1317313805/article/details/81503550 https://www.cnblogs.com/iathanasy/p/946 ...
- 洛谷 P2062 分队问题
这题太毒了....一开始就是死活想不到,结果看了很多遍题解,重新做的时候还是做不出来.. 好像有一点被错误的题解误导了? #include<cstdio> #include<algo ...
- A Simple Task CodeForces - 11D
A Simple Task CodeForces - 11D 题意:输出一个无向图的简单环数量.简单环指无重复边的环.保证图无重边自环. ans[i][j]表示"包含i中的点,以i中第一个点 ...
- 题解报告:hdu 2709 Sumsets
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2709 Problem Description Farmer John commanded his co ...
- magento 用程序生成优惠劵码
参考自http://fragmentedthought.com/fragments/programatically-creating-sales-rule-coupon-code 上面的代码只能生成C ...
- "HIBERNATE_SEQUENCE" does not exist问题处理
JavaWeb应用在MySQL环境下可以正常运行,数据迁移至Oracle或者人大金仓后应用运行爆出如下错误: 严重: Servlet.service() for servlet [JeeCmsAdmi ...