任意两点间的最短距离 (Floyd算法)
时间复杂度 O(n^3)
#include <stdio.h>
#include <stdlib.h>
#define inf 0x3f3f3f3f
int dis[200][200];
int min(int a,int b)
{
if(a<b)
return a;
else
return b;
}
void floyd(int N)
{
int i,j,k;
for(k=0;k<N;k++)
for(i=0;i<N;i++)
for(j=0;j<N;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
int main()
{
int n;
scanf("%d",&n);
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&dis[i][j]);
floyd(n);
int m;
scanf("%d",&m);
while(m--)
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",dis[a][b]);
}
return 0;
}