懒癌晚期学图论的时候自己用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语言开始?
软件行业经过几十年的发展,编程语言的种类已经越来越多了,而且很多新的编程语言已经在这个领域从开始的默默无闻到如今风风火火,整个编程语言朝着集成化方向发展,这样会导致很多的初学者选择上不像以前那么单一了 ...
随机推荐
- MultipartFile(文件的上传)--CommonsMultipartResolver
转自:https://www.cnblogs.com/896240130Master/p/6430908.html SpringMVC 中,文件的上传,是通过 MultipartResolver 实现 ...
- win10系统安装loadrunner11提示“为了对电脑进行保护 已经阻止此应用”的解决方案
在执行loadrunner安装包中的setup.exe时会有如下提示: 解决方法:点击Win+R快捷键打开运行,输入“ gpedit.msc”按下回车键打开组策略编辑: 在左边选择[计算机配置]→[W ...
- Spring Shell简单应用
大致:想要使用Spring Shell,则项目需要是 Spring Boot项目,下面贴出结构和代码 1.POM依赖 <?xml version="1.0" encoding ...
- springboot(六)自动配置原理和@Conditional
官方参考的配置属性:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#common-appl ...
- Lightoj 1090 - Trailing Zeroes (II)
题目连接: http://www.lightoj.com/volume_showproblem.php?problem=1090 题目大意: 给出n,r,p,q四个数字1<=n,r,p,q< ...
- Neighbor House LightOJ - 1047
Neighbor House LightOJ - 1047 #include<cstdio> #include<cstring> #include<algorithm&g ...
- RHEL5.6环境下Oracle10g单主机安装步骤记录
操作环境:RedHat Enterprise Linux 5.6 安装版本:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64 ...
- poj1781In Danger(约瑟夫) 问题
链接 之前队内赛中的一道题目 当时怎么想也没想到,就一直放到了今天,刚才看另一题的讲解突然看到时拿这个题作为引子来讲的,就仔细看了下. 参考<<具体数学>> p7. Josep ...
- AJPFX关于abstract的总结
抽象类: abstract抽象:不具体,看不明白.抽象类表象体现.在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abstract所 ...
- [ USACO 2013 OPEN ] Photo
\(\\\) Description 有一个长度为 \(n\) 的奶牛队列,奶牛颜色为黑或白. 现给出 \(m\) 个区间 \([L_i,R_i]\) ,要求:每个区间里 有且只有一只黑牛 . 问满足 ...