可达性矩阵算法~

直接上代码

#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语言写了个求可达性矩阵的算法~的更多相关文章

  1. 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 ...

  2. 【JZOJ6389】小w学图论

    description 小w这学期选了门图论课,他在学习点着色的知识.他现在得到了一张无向图,并希望在这张图上使用最多n种颜色给每个节点染色,使得任意一条边关联的两个节点颜色不同. 小w获得一张n个节 ...

  3. ACM: meixiuxiu学图论-并查集-最小生成树-解题报告

    /* 最小生成树,最小环的最大权值按照排序后去构建最小生成树就可以了,注意遇到的第一个根相同的点就记录权值,跳出,生成的环就是最小权值环. */ //AC代码: #include"iostr ...

  4. [CodeChef]GERALD07/[JZOJ4739]Ztxz16学图论

    题解: 考虑从小到大枚举右端点 对于每个点,令它的权值等于它的编号 那么我们可以用lct维护出一颗最大生成树 维护方法是每次插入一条判断他们在不在一颗树上 若不在直接加,若在就找到链上的最小值 之后看 ...

  5. 6389. 【NOIP2019模拟2019.10.26】小w学图论

    题目描述 题解 之前做过一次 假设图建好了,设g[i]表示i->j(i<j)的个数 那么ans=∏(n-g[i]),因为连出去的必定会构成一个完全图,颜色互不相同 从n~1染色,点i的方案 ...

  6. Tarjan在图论中的应用(二)——用Tarjan来求割点与割边

    前言:\(Tarjan\) 求割点和割边建立在 \(Tarjan\)算法的基础之上,因此建议在看这篇博客之前先去学一学\(Tarjan\). 回顾\(Tarjan\)中各个数组的定义 首先,我们来回顾 ...

  7. 学一学书里的django是怎么写views.py的

    他山之石,可以攻玉嘛. 好的习惯有时也是学别人来养成的. 外国人的编码习惯,学啊. from django.core.urlresolvers import reverse_lazy from dja ...

  8. 从零开始学编程_第A001期_C语言HelloWorld详解

    emmm,这是我的第一篇博客. 作为一个软件工程专业的学生,我希望自己能在编程方面有不错的成就,我们老师告诉我们学编程就要写博客,在写博客的过程中不断成长,结交朋友,所以我就开始尝试写专业相关的博客. ...

  9. 为什么大部分的程序员学编程,都会选择从C语言开始?

    软件行业经过几十年的发展,编程语言的种类已经越来越多了,而且很多新的编程语言已经在这个领域从开始的默默无闻到如今风风火火,整个编程语言朝着集成化方向发展,这样会导致很多的初学者选择上不像以前那么单一了 ...

随机推荐

  1. 【180】IDL 读写 HDF 文件

    HDF(Hierarchical Data Formats)数据格式由 NCSA 开发.HDF 提供了大量的数据模式,包括多维数组.表格.图像.注解和调色板.在下面的章节中,将描述 HDF 科学数据系 ...

  2. java笔记之IO1

    File:文件和目录(文件夹)路径名的抽象表示形式 * 构造方法: *   File(String pathname):根据一个路径得到File对象 *   File(String parent, S ...

  3. 【黑金教程笔记之002】【建模篇】【Lab 01 永远的流水灯】—笔记&勘误

    学习并行操作的思想. 勘误001: Page 17,模块图下方,“扫描频配置定为100Hz”应为10Hz. 勘误002: Page 17,最后一行 “10ms”应为100ms:“2.5ms”应为25m ...

  4. ubuntu12.04中极品五笔简体繁体切换

    不小心切换成了繁体,按Ctrl+:,可以切换回来.

  5. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(四)图书信息的增删改查

    前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/asp ...

  6. [Swift通天遁地]一、超级工具-(3)带切换图标的密码文本框

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. 【POJ - 2251】Dungeon Master (bfs+优先队列)

    Dungeon Master  Descriptions: You are trapped in a 3D dungeon and need to find the quickest way out! ...

  8. hdu 2063 过山车 (最大匹配 匈牙利算法模板)

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...

  9. Windows软件推荐

    本篇博文主要记录一些实用性的windows软件或者插件,重在积累! 工具类 1.截图软件 https://zh.snipaste.com/ Snipaste 是一个简单但强大的截图工具,也可以让你将截 ...

  10. UML 活动图(转载)

    活动图:用于表示系统中各种活动的次序,它的应用非常广泛,即可用来描述用例的工作流程,也可用来描述类中某个方法的操作行为.常用于表示业务流程,对系统功能建模,强调对象之间的控制流.活动图是由状态图变化而 ...