原作者:http://www.verydemo.com/demo_c92_i330056.html
方法:floyd
#include<stdio.h>
#include<stdlib.h>
#define INF 1000000
int w[110][110], q[1000], y[1010], n = 0;
int main()
{
int m = 0;
int i = 0, j = 0, k = 0;
int p = 0, q = 0, r = 0;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(m==0&&n==0)
break;
for(i = 1;i<=n;i++)
{
for(j = 1;j<=n;j++)
{
w[i][j] = INF;
}
w[i][i] = 0;
}
for(i = 0;i<m;i++)
{
scanf("%d%d%d",&p,&q,&r);
w[p][q] = r;
w[q][p] = r;
}
//floyd
for(k = 1;k<=n;k++)
{
for(i = 1;i<=n;i++)
{
for(j = 1;j<=n;j++)
{
if(w[i][j]>w[i][k] + w[k][j])
{
w[i][j] = w[i][k] + w[k][j];
}
}
}
}
printf("%d\n",w[1][n]);
}
system("pause");
return 0;
}