C语言求所有顶点对之间的最短路径:FLOYD算法

标签:
it |
分类: 编程碎片 |
所有顶点对之间的最短路径问题是:对于给定的有向网络G=(V,E),要对G中任意两个顶点v,w(v不等于w),找出v到w的最短路径。当然我们可以n次执行DIJKSTRA算法,用FLOYD则更为直接,两种方法的时间复杂度都是一样的。
有向网络用邻接矩阵存储,以下面的有向网络为例:
http://s15/middle/686d0fb0n78c1c0ef710e&690
源程序清单:
#include<stdio.h>
#define n 5
#define maxsize 160
int path[n][n];//路径矩阵
void floyd(int A[][n],int C[][n]);
void main()
{
}
void floyd(int A[][n],int C[][n])
{
}
运行结果:
(160为无穷远,不可达)
1到2的最短距离为10
输出路径:
1——>2
****************************************************
1到3的最短距离为50
输出路径:
1——>4——>3
****************************************************
1到4的最短距离为30
输出路径:
1——>4
****************************************************
1到5的最短距离为60
输出路径:
1——>4——>3——>5
****************************************************
2到1的最短距离为160
输出路径:
2到1不可达
****************************************************
2到3的最短距离为50
输出路径:
2——>3
****************************************************
2到4的最短距离为160
输出路径:
2到4不可达
****************************************************
2到5的最短距离为60
输出路径:
2——>3——>5
****************************************************
3到1的最短距离为160
输出路径:
3到1不可达
****************************************************
3到2的最短距离为160
输出路径:
3到2不可达
****************************************************
3到4的最短距离为160
输出路径:
3到4不可达
****************************************************
3到5的最短距离为10
输出路径:
3——>5
****************************************************
4到1的最短距离为160
输出路径:
4到1不可达
****************************************************
4到2的最短距离为160
输出路径:
4到2不可达
****************************************************
4到3的最短距离为20
输出路径:
4——>3
****************************************************
4到5的最短距离为30
输出路径:
4——>3——>5
****************************************************
5到1的最短距离为160
输出路径:
5到1不可达
****************************************************
5到2的最短距离为160
输出路径:
5到2不可达
****************************************************
5到3的最短距离为160
输出路径:
5到3不可达
****************************************************
5到4的最短距离为160
输出路径:
5到4不可达
****************************************************
请按任意键继续. . .