Floyd得实现-创新互联
测试数据:![Floyd得实现
Floyd得实现](/upload/otherpic33/2128115.jpg)
当前标题:Floyd得实现-创新互联
标题URL:http://ybzwz.com/article/iieeo.html
![Floyd得实现
Floyd得实现](/upload/otherpic33/2128115.jpg)
输入:
4
0 1 1
0 3 4
1 2 9
1 3 2
2 0 3
2 1 5
2 3 8
3 2 6
-1 -1 -1
输出:
0=>1 1 0→1
0=>2 9 0→1→3→2
0=>3 3 0→1→3
1=>0 11 1→3→2→0
1=>2 8 1→3→2
1=>3 2 1→3
2=>0 3 2→0
2=>1 4 2→0→1
2=>3 6 2→0→1→3
3=>0 9 3→2→0
3=>1 10 3→2→0→1
3=>2 6 3→2
#include
#include
#define INF 1000000 //无穷大#define MAXN 20
int n; //顶点个数int Edge[MAXN][MAXN]; //邻接矩阵int A[MAXN][MAXN]; //
int path[MAXN][MAXN]; //
void Floyd( ) //假定图的邻接矩阵和顶点个数已经读进来了{
int i, j, k;
for( i=0; i%d %d ", i, j, A[i][j] ); //输出顶点i到顶点j的最短路径长度
//以下代码用于输出顶点0到顶点i的最短路径 memset( shortest, 0, sizeof(shortest) );
int k = 0; //k表示shortest数组中最后一个元素的下标 shortest[k] = j;
while( path[i][ shortest[k] ] != i )
{
k++; shortest[k] = path[i][ shortest[k-1] ];
}
k++; shortest[k] = i;
for( int t=k; t>0; t-- )
printf("%d→", shortest[t] );
printf("%d
", shortest[0] );
}
}
return 0;
}
当前标题:Floyd得实现-创新互联
标题URL:http://ybzwz.com/article/iieeo.html