Floyd算法求最小环

在这里插入图片描述
先放代码,再证明算法的正确性。

证明

我们给一个图做一个编号(1–n),也就是表示n个点。
对于每一个环(不包括自环),我们取这个环上点的最大编号k。
那么也就说与k相邻的两个点的编号小与k,我们记为 i 和 j 。
那么 i 与 j 之间的最短路经过点的编号显然小与 k ,不然 k 就要被赋予这个更大的值
那么我们跑 k-1 次循环就可以找到 i 与 j 的最短路。
我们假设最短路长度是dis(i, j)。那么这个环长度就是dis(i,j) + val(i,k) + val(k,j)
v a l ( i , j ) 表 示 i 与 j 边 的 长 度 , 没 有 则 设 为 i n f val(i,j)表示i与j边的长度,没有则设为inf val(i,j)ijinf
这样我们就可以通过枚举k,然后枚举与k相邻的边。

模板题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值