Description
用弗洛伊德算法求任意两点间的最短路径的长度
Input
先输入一个小于100的正整数n,然后输入图的邻接矩阵(10000表示无穷大,即两点之间没有边),之后再输入一个小于100的正整数m,最后的m行每行输入两个不同的0到n-1之间的整数表示两个点。
Output
用弗洛伊德算法求任意两点间的最短路径的长度,并输出这些两个点之间的最短路径的长度。
-
Sample Input
4 0 2 10 10000 2 0 7 3 10 7 0 6 10000 3 6 0 2 0 2 3 0
-
Sample Output
9 5
#include <stdio.h> #include <stdlib.h> #define maxnum 105 int ans[maxnum][maxnum]; void floyd(int n) { int i,j,k; for(i = 1;i <= n;i++) { for(j = 1;j <= n;j++) { scanf("%d",&ans[i][j]); } } for(k = 1;k <= n;k++) { for(i = 1;i <= n;i++) { for(j = 1;j <= n;j++) { if(ans[i][j]>ans[i][k]+ans[k][j] ) { ans[i][j]=ans[i][k]+ans[k][j]; } } } } } void print(int m) { int i; int x,y; scanf("%d",&m); int temp[maxnum]; for(i = 1;i <= m;i++) { scanf("%d %d",&x,&y); temp[i] = ans[x+1][y+1]; } for(i = 1;i <= m;i++) { printf("%d\n",temp[i]); } } int main() { int n,m; scanf("%d",&n); int i, j; floyd(n); print(m); return 0; }