最小环-Floyd
Posted liuwenhan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小环-Floyd相关的知识,希望对你有一定的参考价值。
floyd求最小环
在Floyd的同时,顺便算出最小环。
Floyd算法
1 for(k=1;k<=n;k++)
2 for(i=1;i<k;i++)
3 for(j=i+1;j<k;j++)
4 if(d[i][j]+m[i][k]+m[k][j]<min)
5 min=d[i][j]+m[i][k]+m[k][j];
6 for(i=1;i<=n;i++)
7 for(j=1;j<=n;j++)
8 if(d[i][k]+d[k][j]<d[i][j])
9 d[i][j]=d[i][k]+d[k][j];
10
保证了最外层循环到 k 时所有顶点间已求得以 0...k-1 为中间点的最短路径。一
个环至少有 3 个顶点,设某环编号最大的顶点为 L ,在环中直接与之相连的两个顶点编号
分别为 M 和 N (M,N < L),则最大编号为 L 的最小环长度即为 Graph(M,L) + Graph(N,L) +
Dist(M,N) ,其中 Dist(M,N) 表示以 0...L-1 号顶点为中间点时的最短路径,刚好符合 Floyd
算法最外层循环到 k=L 时的情况,则此时对 M 和 N 循环所有编号小于 L 的顶点组合即
可找到最大编号为 L 的最小环。再经过最外层 k 的循环,即可找到整个图的最小环。
个环至少有 3 个顶点,设某环编号最大的顶点为 L ,在环中直接与之相连的两个顶点编号
分别为 M 和 N (M,N < L),则最大编号为 L 的最小环长度即为 Graph(M,L) + Graph(N,L) +
Dist(M,N) ,其中 Dist(M,N) 表示以 0...L-1 号顶点为中间点时的最短路径,刚好符合 Floyd
算法最外层循环到 k=L 时的情况,则此时对 M 和 N 循环所有编号小于 L 的顶点组合即
可找到最大编号为 L 的最小环。再经过最外层 k 的循环,即可找到整个图的最小环。
上面是对无向图的情况
若是有向图,只需稍作改动。注意考虑有向图中 2 顶点即可组成环的情况
题目:
以上是关于最小环-Floyd的主要内容,如果未能解决你的问题,请参考以下文章