图论 —— 图的连通性 —— 传递闭包

本文详细介绍了传递闭包的概念及其在连通性算法中的应用。通过使用Floyd算法,我们可以有效地计算出图中所有节点之间的连通性,从而得到传递闭包。此过程不仅适用于有向图,也适用于无向图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【概述】

传递闭包:对于一个节点 i,如果 j 能到 i,i 能到 k,那么 j 就能到 k,求传递闭包,就是把图中所有满足这样传递性的节点计算出来,计算完成后,就知道任意两个节点之间是否相连。

简单来说,传递闭包是一种关于连通性的算法,其是指所有点的所能到达的点集。

【传递闭包的计算】

Floyd 可以用来判断图中两点是否连通,在求连通性的同时,可以进行传递闭包计算。

对于一个没有边权的图,可将相邻两点距离设为 dis[i][j]=true,不相邻的两点距离设为 dis[i][j]=false,而后进行 Floyd 算法即可。 

for(int k=1;k<=n;k++)//第一重循环为i→j的中间点k
    for(int i=1;i<=n;i++)//第二重循环为起点i
        for(int j=1;j<=n;j++)//第三重循环为终点j
            if(dis[i][j]>dis[i][k]+dis[k][j])//如果i→k的距离加上k→j的距离小于i→j的距离
                if(dis[i][k]&&dis[k][j])//更新最短路径
                    dis[i][j]=true;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值