Warshall 算法(离散数学传递闭包)
Warshall 算法
算法思路:
(1)先初始化一个二维数组
(2)利用循环输入N*N的矩阵
(3)进行矩阵的运算
M0的第0列的1和第0行进行逻辑加。比如[1,0]+[0,1]=[1,1]=1
M1是在M0计算结果后的第1列和第1行进行逻辑加。
M2,M3和上面一样。
(4)打印计算后数组
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 4 //定义矩阵为N*N
int get_matrix(int a[N][N])
{int i = 0, j = 0;for (i = 0; i < N; i++){for (j = 0; j < N; j++){scanf("%d", &a[i][j]);if (a[i][j] != 0 && a[i][j] != 1)return 1;}}return 0;
}
void warshall(int a[N][N])
{//(1)i=1//(2)对所有j如果a[j,i]=1.则对k=0,1. ... ,N-1,a[j,k]=a[j,k]|a[i,k]//(3)i加1;//(4)如果i<N则转到步骤2,否则停止int i = 0, j = 0, k = 0;for (i = 0; i < N; i++){for (j = 0; j < N; j++){if (a[j][i])//判断第i列上的第j个元素是不是1,是1才要逻辑加{for (k = 0; k < N; k++){a[j][k] = a[j][k] | a[i][k];//逻辑加}}}}
}
void output_matrix(int a[N][N])
{int i = 0, j = 0;for (i = 0; i < N; i++){for (j = 0; j < N; j++){printf("%d ", a[i][j]);}printf("\n");}
}
int main()
{int a[N][N] = { 0 };printf("please input a matrix with %d*%d\n", N, N);if (get_matrix(a)){printf("Get matrix error!Only 0 or 1 in matrix!\n");return 1;//错误返回主函数,返回值为1;}warshall(a);output_matrix(a);return 0;//正常返回主函数,返回值为0
}
Warshall 算法(离散数学传递闭包)相关推荐
- C语言用warshall算法求传递闭包transitive closure(附完整源码)
用warshall算法求传递闭包transitive closure warshall算法求传递闭包完整源码 warshall算法求传递闭包完整源码 #include <stdbool.h> ...
- WarShall算法求传递闭包(可达矩阵)
最近在复习离散数学,顺便记录记录自己对warshall算法的理解. 1.传递闭包(可达矩阵) 传递闭包是有向图的一个重要性质,它指的是在有向图中从任意一个节点出发,可以到达的所有节点的集合.在某些应用 ...
- warshall算法求传递闭包c++_【建模小课堂】图论算法
图论算法 图论算法在计算机科学中扮演着很重要的角色,它提供了对很多问题都有效的一种简单而系统的建模方式.很多问题都可以转化为图论问题,然后用图论的基本算法加以解决.这类问题算法主要包括Dijkstra ...
- War-shall 算法 【求传递闭包】 离散数学记录
学离散数学时遇到到第一个算法,记录一下: 代码思路: warshall(A[1...n,1...n] r(0)<-A; for(k=1;k<=n;k++)for(i=1;i<=n;i ...
- 离散数学 传递闭包 Warshall算法
老师布置一个作业,要写Warshall算法课后,这里给写出来了. 这个算法本身很简单,倒是学习了一下参数为二维数组的传递方法,正确代码如下: /* Warshall算法 */ #include < ...
- 离散数学中Warshall算法简析
离散数学中Warshall算法简析 最近学了离散数学的图论,突然感觉离散数学的作用十分强大,相信学好离散数学中的算法,编程的魅力也不言而喻.闲话不多说,这篇博客中记录的是Warshall算法的简单解析 ...
- WarShall算法求矩阵传递闭包关系
离散知识 给了你一个矩阵,你如何求他的传递闭包呢? //求出如下矩阵的传递闭包 1 0 1 0 0 1 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 利用WarShall ...
- Warshall算法求有向图的传递闭包
1定义是这样给出的,传递闭包:对于任何关系 R,R 的传递闭包总是存在的.传递关系的任何家族的交集也是传递的.进一步的,至少存在一个包含 R 的传递关系,也就是平凡的: X × X.R 传递闭包给出自 ...
- 基于Warshall算法的连通图及欧拉图判定方法
1736年欧拉解决了哥尼斯堡七桥问题.他在这一具体问题的基础上进一步研究,最终找到了一个简便的原则可以鉴别一个图(多重图)能否一笔画成. 本文中,笔者使用布尔矩阵来存储一个无向图,并结合集合论中&qu ...
最新文章
- R语言e1071包中的支持向量机:构建nu-classification类型的支持向量机SVM并分析不同nu值惩罚下模型分类螺旋线型(sprials)线性不可分数据集的表现
- 洛谷 P1101 单词方阵
- DC使用教程系列1-.synopsys.dc.setup的建立
- tp5上传文件并获取文件路径_thinkphp表单上传文件并将文件路径保存到数据库中...
- 若川诚邀你加源码共读群,帮助更多人学会看源码~
- java jni helloword_JNI学习一:编写HelloWorld程序
- Java笔记-JDBC心跳检测及断开重连线程实例
- leanote 支持php,Leanote source leanote源码导读
- 英文科技写作 · 经验分享 · 讨论合集
- LVS的VS/NAT及VS/DR类型实现
- tidyverse —— forcats包
- atitit.javascript调用java in swt attilax 总结
- oracle怎么拼接数据,拼接oracle数据
- ch341a_USB转串口/并口驱动
- Python与ADB的基情四射(一)——简单命令
- 大数据先驱Cloudera拥抱云计算,探索后Hadoop时代的下一代数据平台
- MTK android 常用修改点
- 李沐动手学深度学习V2-实战Kaggle比赛:狗的品种识别(ImageNet Dogs)和代码实现
- 5.8 前端开发日报
- 如何在Microsoft Edge中更改主页