http://202.115.37.2:8080/soj/source.action?id=445103
#include <stdio.h>
#define INF 0xfffffff
int map[201][201];
void Floyd(int n)
{
registerint i,k,j;
for (k=0;k<n;k++)
{
for (i=0;i<n;i++)
{
if (i!=k)
for (j=0;j<n;j++)
{
if (i!=j && j!=k&&(map[i][k] + map[k][j] <map[i][j]))
map[i][j]=map[i][k] + map[k][j];
}
}
}
}
int main()
{
int i,j;
int n,m,a,b,val,star,end,k;
while (scanf("%d%d",&n,&m)!=EOF,n)
{
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
if (i==j)
map[i][j]=0;
else
map[i][j]=INF;
}
for (i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&val);
if(val < map[a-1][b-1]) 注意这句:因为路比较多,要去最短的路
map[a-1][b-1]=map[b-1][a-1]=val;
}
Floyd(n);
scanf("%d",&k);
while(k--){
scanf("%d%d",&star,&end);
if(map[star-1][end-1] < INF)
printf("%d\n",map[star-1][end-1]);
else
printf("pity\n");
}
printf("\n");
}
return 0;
}