判断图的强连通性

判断图的强连通性
一、判断一个n阶图的强连通性分以下3步骤:
<1>根据图写出图的邻接矩阵(n * n)。
<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)

本文发布于:2024-09-20 20:38:39,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/210045.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   得到   顶点   存在   通路   判断   连通性
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议