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;
}