懒癌晚期学图论的时候自己用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语言开始?
软件行业经过几十年的发展,编程语言的种类已经越来越多了,而且很多新的编程语言已经在这个领域从开始的默默无闻到如今风风火火,整个编程语言朝着集成化方向发展,这样会导致很多的初学者选择上不像以前那么单一了 ...
随机推荐
- jquery中跳出each循环
or循环 VS jquery.each continue return true break return false
- DecimalFormat数字格式化用法“0”和“#”的区别
1. 以“0”补位时: 如果数字少了,就会补“0”,小数和整数都会补: 如果数字多了,就切掉,但只切小数的末尾,整数不能切: 同时被切掉的小数位会进行四舍五入处理. 2. 以“#”补位时: 如果数字少 ...
- [UOJ388]配对树
题解 贪心+线段树 首先如果我们知道了哪些点是关键点应该怎么搞 显然最小的匹配方案所有的边至多被经过一次 可以考虑每条边的贡献 因为我们要贡献尽量小 所以我们尽量让每条边经过的人尽量少 那么每条边被经 ...
- 人工智能(七)逻辑Agent
一.逻辑 逻辑是一种可以从中找出结论的形式化语言. 句法(规则)用语言定义句子. 语义定义句子的含义.定义一个句子的真假性. 二.蕴含 即一个事情逻辑上是另一个事情的必然结果:KB ╞ α 知识库KB ...
- DB2:在缓冲池 "1" 中当前没有任何页面可用。. SQLCODE=-1218, SQLSTATE=57011, DRIVER=3.61.75
服务器端DB2数据库最近频繁报错: 在缓冲池 , SQLSTATE=, DRIVER= 试验发现简单的查询SQL执行没有问题,复杂的SQL就会报上述错误. 百度发现是因为数据库bufferpool太小 ...
- Android 线程池系列教程(2)Thread,Runnable是基类及如何写Run方法
Specifying the Code to Run on a Thread 上一课 下一课 1.This lesson teaches you to Define a Class that Im ...
- python_数据类型基本操作(2)
概览: 第1章 基础数据类型宏观的初识第2章 int 第3章 bool 第4章 str 4.1 python体现形式 4.2 引号用法 4.3 字符串运算 4.3.1 字符串相加 4.3.2 字符串相 ...
- Codeforces Round #138 (Div. 1)
A 记得以前做过 当时好像没做对 就是找个子串 满足括号的匹配 []最多的 开两个栈模拟 标记下就行 #include <iostream> #include<cstring> ...
- Caused by: javax.el.PropertyNotFoundException: Property 'product' not found on type java.lang.String
今天在JSP利用EL表达式取值报了 "javax.el.PropertyNotFoundException”,经过debug和打印将问题定位到这段代码: HTML应该是没啥问题,看提示在ja ...
- jstat命令-帮助优化java性能
jstat命令使用 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]