判断图的强连通性
一、判断一个n阶图的强连通性分以下3步骤:
<2>依次计算邻接矩阵的2至(n-1)次方。
桡骨
<3>观察得到的矩阵,若存在一点在每一个矩阵中都是0,则该点对应的两个顶点不存在通路,可得该图不是强连通图。若任一点在这些图中存在至少一个不为0,则任意两点总存在通路,可得该图是强连通图。(程序中将得到每个矩阵相加得到d矩阵,将d矩阵中所有不为“0”的元素置为“1”,再由顶点到顶点是连通的性质得到可达矩阵)。2、用程序实现<2><3>两个步骤:
源代码如下:
#include<stdio.h>
int main(){
int x,i,j,k;
printf("请输入图的顶点数:");
scanf("%d",&x);
int a[x][x],b[x][x],c[x][x],d[x][x];//a是图的邻接矩阵 由d得出图的可达矩阵
printf("请依次输入每行数据:\n");
for(i = 0 ; i < x ; i++){
for(j = 0 ; j < x ; j++){
scanf("%d",&a[i][j]);
b[i][j] = a[i][j];
c[i][j] = a[i][j];
d[i][j] = a[i][j];
}
getchar();
}
卖木雕的少年教学设计 //依次求出a的2至x-1次方
int t = 2;
while(t < x){
printf("A的%d次方:\n",t++);
减压蒸馏 for(i = 0 ; i < x ; i++){
for(j = 0 ; j < x ; j++){
int sum = 0;
for(k = 0 ;k < x ; k++){
sum = sum + b[i][k] * a[k][j];
}
c[i][j] = sum;
d[i][j] += c[i][j];
printf("%d\t",c[i][j]);
}
printf("\n");
}
for(i= 0 ; i < x ; i ++)
for(j = 0 ; j < x ; j++)
b[i][j] = c[i][j];
}
//输出可达矩阵并判断是否为强连通图
int flag = 1;
3500年前情侣墓
printf("可达矩阵为:\n");
for(i= 0 ; i < x ; i ++){
for(j = 0 ; j < x ; j++){
if(d[i][j] > 0 || i == j)
printf("1\t");
else{
printf("0\t");
flag = 0;
}
}
printf("\n");
}
胡焕庸线 if(flag == 1)
printf("由可达矩阵知此图是强连通图!\n");
else
printf("由可达矩阵知此图不是强连通图!\n");
return 0;
bmw族}
实例测试:
教材p127图5-13
教材p125 图5-9(a)