可达性矩阵算法~

直接上代码

#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. Java 支持JavaScript脚本计算

    Java支持了JavaScript脚本的执行计算能力: import javax.script.Invocable; import javax.script.ScriptEngine; import ...

  2. 修复win7的启动引导

    自己的电脑上本身是win7,为了试验openstack,决定装个ubuntu server,过程也不太懂,一直卡在分区不敢贸然前进,反复了几次,终于导致我进不了原来的win7,原因不明! 当时就慌了, ...

  3. bzoj 4815: [Cqoi2017]小Q的表格【欧拉函数+分块】

    参考:http://blog.csdn.net/qq_33229466/article/details/70174227 看这个等式的形式就像高精gcd嘛-所以随便算一下就发现每次修改(a,b)影响到 ...

  4. window 下拉取github项目失败 (Permission denied (publickey))

    原因是github 帐号ssh 失效或者没有配置 1.找到gitcmd 并进入 2.在gitcmd 下切换到 安装git路劲\Git\usr\bin 3.提示在C:\Users\Administrat ...

  5. 转】[1.0.2] 详解基于maven管理-scala开发的spark项目开发环境的搭建与测试

    场景 好的,假设项目数据调研与需求分析已接近尾声,马上进入Coding阶段了,辣么在Coding之前需要干马呢?是的,“统一开发工具.开发环境的搭建与本地测试.测试环境的搭建与测试” - 本文详细记录 ...

  6. JavaScript编程艺术-第6章(JavaScript美术馆改进版)代码

    基于[第4章(JavaScript美术馆)代码]进行改进(***HTML与JS分离***) (*亲测可用) HTML: JS: CSS:

  7. [ZPG TEST 115] 种树【差分约束】

    4. 种树 (trees.pas/c/cpp) [问题描述] 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号为1..n.每个块的大小为一个单位尺寸并最多可种一 ...

  8. 题解报告:hdu 2030 汉字统计

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2030 Problem Description 统计给定文本文件中汉字的个数. Input 输入文件首先 ...

  9. 线程间的参数传递 分类: linux c/c++ 2014-06-15 17:48 607人阅读 评论(0) 收藏

    在多线程编程中,常常需要从主线程传递参数给子线程或在主线程中获得子线程的计算结果, 若使用全局变量实现,必然需要对临界区保护,因此导致大量的切换工作造成效率的低下: 而利用进程间的参数传递可以解决这一 ...

  10. synchronized(5)修饰语句块之:synchronized(XXX.class)

    synchronized(XXX.class)有两种写法 synchronized(XXX.class)或者synchronized(obj.getClass()) Class也是一个类xxx.cla ...