给定一个邻接矩阵,求可达矩阵及强连通、单向连通、弱连通、不连通的判断
算法如下:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX 10int AdjM[MAX][MAX];//全局变量void Warshell(int (*AdjMarix)[MAX],int n){//warshell算法求传递闭包
int i,j;
for(i=0;i<n;i++)for(j=0;j<n;j++)if(AdjMarix[i][j])AdjM[i][j]=1;elseAdjM[i][j]=0; for(i=0;i<n;i++)for(j=0;j<n;j++)if(AdjM[j][i]==1){for(int k=0;k<n;k++){if(AdjM[i][k])AdjM[j][k]=1;}}for(i=0;i<n;i++)AdjM[i][i]=1;printf("可达矩阵为:\n");
for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%d ",AdjM[i][j]);printf("\n");}
}int Q_judge(int (*AdjM)[MAX],int n){int i,j;
for(i=0;i<n;i++)for(j=i;j<n;j++)if(!(AdjM[i][j]*AdjM[j][i]))return 0;
printf("强连通\n");
return 1;
}int D_judge(int (*AdjM)[MAX],int n){int i,j;
for(i=0;i<n;i++)for(j=i;j<n;j++)if((AdjM[i][j]+AdjM[j][i])==0)return 0;
printf("单向连通\n");
return 1;
}int R_judge(int (*AdjM)[MAX],int n){int i,j;
for(i=0;i<n;i++)for(j=0;j<n;j++)if(AdjM[i][j])AdjM[j][i]=1;
Warshell(AdjM,n);
for(i=0;i<n;i++)for(j=i;j<n;j++)if((AdjM[i][j]*AdjM[j][i])==0)return 0;
printf("弱连通\n");
return 1;
}int main(){int n;
printf("请输入结点个数:");
scanf("%d",&n);
int AdjMarix[MAX][MAX];
printf("请输入邻接矩阵:\n");
for(int i=0;i<n;i++)for(int j=0;j<n;j++){scanf("%d",&AdjMarix[i][j]);AdjM[i][j]=AdjMarix[i][j];}
Warshell(AdjM,n);
if(Q_judge(AdjM,n));
else if(D_judge(AdjM,n));
else if(R_judge(AdjM,n));
else printf("不连通\n");
system("pause");
}
测试结果如下:
给定一个邻接矩阵,求可达矩阵及强连通、单向连通、弱连通、不连通的判断相关推荐
- 给定一个二维的 0-1 矩阵,其中 0 表示海洋,1 表示陆地。单独的或相邻的陆地可以形成岛屿,每个格子只与其上下左右四个格子相邻。求最大的岛屿面积。
给定一个二维的 0-1 矩阵,其中 0 表示海洋,1 表示陆地.单独的或相邻的陆地可以形成岛屿,每个格子只与其上下左右四个格子相邻.求最大的岛屿面积. function func(arr) {/*** ...
- matlab可达矩阵 结果,matlab求可达矩阵
matlab中可达矩阵的计算 2页 1下载券 邻接矩阵的可达矩阵及层... 2页 2下载券 邻接矩阵的一种计算方法 7页 免费 ISM算法(邻接矩阵求可达... 暂无...... JAVA矩阵算法代码 ...
- java 求最长重复子串_给定一个字符串,求出其最长的重复子串。
#include #include #include #include using namespace std; //给定一个字符串,求出其最长的重复子串 //方法一 string lsubstr_1 ...
- 给定一个 n X n 的矩阵 和 R,求旋转 90 X R 度以后的矩阵
1. 问题 [例题]循环输入,每组数据先输入一个 n(n<=10),然后 n 行 n 列数据代表一个矩阵, 每个数据为一个整数,然后再给出一个数字 R,输出这个矩阵按照顺时针旋转 90 X R ...
- 给定一个数组求里面数字拼在一起组成的最小数字
问题描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. Code: ...
- 求组合数python_给定一个序列求指定位数的排列组合数
题目:求1到p(p<10)个数中取k(1 样例输入:3 2 样例输出:[1,2], [1,3], [2,1], [2,3], [3,1], [3,2], 方法:回溯+深度优先搜索 class S ...
- 离散数学 —— 二元关系(图、零图与平凡图、度、握手定理、平行边、简单图与完全图、补图、子图与生成子图、同构、通路与回路、点与边割集、最短路线问题、强弱联通图、邻接矩阵与可达矩阵、欧拉图、平面图等)
5.1 关系及其表示: 补充一点: 简单路径:无重复边(点不作要求) 基本路径(初级路径):无重复点 一个路径是基本路径,那么必是简单路径 5.2 路与回路: 5.3 图的矩阵 ...
- WarShall算法求传递闭包(可达矩阵)
最近在复习离散数学,顺便记录记录自己对warshall算法的理解. 1.传递闭包(可达矩阵) 传递闭包是有向图的一个重要性质,它指的是在有向图中从任意一个节点出发,可以到达的所有节点的集合.在某些应用 ...
- 给定一个n*m矩阵,求从左上角到右下角走的项目3个问题?
这个问题中走矩阵的格子还是定点是不一样的. 这里给出两个解法. 题目1:给定一个n*m矩阵,求从左上角格子到右下角格子总共存在多少条路径,每次只能向右走或者向下走. # 题目1:给定一个n*m矩阵,求 ...
- 给定一个二维 0-1 矩阵,其中 1 表示陆地,0 表示海洋,每个位置与上下左右相连。已知矩阵中有且只有两个岛屿,求最少要填海造陆多少个位置才可以将两个岛屿相连。
给定一个二维 0-1 矩阵,其中 1 表示陆地,0 表示海洋,每个位置与上下左右相连.已知矩阵中有且只有两个岛屿,求最少要填海造陆多少个位置才可以将两个岛屿相连. 输入是一个二维整数数组,输出是一个非 ...
最新文章
- beeline执行sql语句_由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考...
- pandas(三) -- DataFrame的基本操作
- ThinkPad紧凑型蓝牙键盘(0B47189)鼠标滚轮用法,F1到F12功能键的功能切换以及其他技巧
- SharePoint自动化系列——Solution auto-redeploy using Selenium(C#)
- python吧_python初始与安装 - Python东
- linux修改java占用端口号_Linux端口被占用、查看
- SQL基本操作(三):存储过程和触发器
- LeetCode简单题目(#118 #119 #121 #122 #125 #136 #141 #155)-8道
- Android透明效果的实现
- Binary XML file line #23: Error inflating class android.widget.TextView
- Java| 编译和反编译
- google code的使用方法
- html5css重复径向渐变,CSS3怎么实现重复径向渐变效果
- Office-008 文字转公式:word公式输入
- Matlab系列之GUI设计实例1
- OSPO Summit 2022 正式启动!OSPO Summit 2022 Launched!
- Graphics2D 使用详解 【转】
- 户外风景拍摄自然风光摄影网站搭建模板
- 安卓的SoundPool(音效池)播放声音(及具体参数解析)
- 超详细Netty入门