在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
输入保证至少存在1条商店到赛场的路线。
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
3
2
#include<stdio.h>
#define inf 0x3f3f3f3f
int main()
{
int n, m, i, j, temp, e[105][105], book[205], dis[205];
while(scanf("%d%d", &n, &m)!=EOF, m+n)
{
int a, b, c, minn;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
e[i][j]=inf;
for(i=1;i<=n;i++)
book[i]=0;
for(i=1;i<=m;i++)
{
scanf("%d%d%d", &a, &b, &c);
if(c<e[a][b])
e[a][b]=e[b][a]=c;
}
book[1]=1;
for(i=1;i<=n;i++)
dis[i]=e[1][i];
for(i=1;i<n;i++)
{
minn=inf;
for(j=1;j<=n;j++)
if(book[j]==0&&dis[j]<minn)
{
minn=dis[j];
temp=j;
}
book[temp]=1;
for(j=1;j<=n;j++)
if(book[j]==0&&dis[j]>dis[temp]+e[temp][j])
dis[j]=dis[temp]+e[temp][j];
}
printf("%d\n", dis[n]);
}
return 0;
}