您的位置:首页 > 理论基础 > 数据结构算法

Pku acm 1125 Stockbroker Grapevine 数据结构题目解题报告(八)---- 弗洛伊德(floyd)算法

2008-03-07 11:48 615 查看
有向图中每一对顶点间的最短路径问题,典型的弗洛伊德算法。
问题描述:已知一个含有n个顶点的各边权值均大于0的带权有向图,对每对顶点vi!=vj,要求求出每一对顶点之间的最短路径和最短路径长度。
解决方案:弗洛伊德(floyd)算法

3

2

1

对于这样一个例子: 4

2
2 5 2 6

A0[i][j]=cost[i][j]:

A0
1
2
3
A1
1
2
3
1
0
4
5
1
0
4
5
2
2
0
6
2
2
0
min(6,2+5)
3
2
2
0
3
2
min(2,2+4)
0
A2
1
2
3
A3
1
2
3
1
0
4
min(5,4+6)
1
0
min(4,5+2)
5
2
2
0
6
2
min(2,6+2)
0
6
3
min(2,2+2)
2
0
3
2
2
0
核心的c代码如下:
for(int k=1;k<=n;k++) //生成A0,A1,A2...的循环
for(int i=1;i<=n;i++) //
for(int j=1;j<=n;j++) //
//如果是i==k||j==k||i==j就保持不变,否则取最小值
array[i][j]=(i==k||j==k||i==j)?array[i][j]:
((array[i][j]<(array[i][k]+array[k][j])?array[i][j]:(array[i][k]+array[k][j])));
最后根据题意,取每行最大值中的最小值即可。
带有详细注释的代码可以在http://download.csdn.net/user/china8848/获得
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐