最短路
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7111 Accepted Submission(s): 3033
输入保证至少存在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 M 100000000
int map[109][109],dist[109],s[109],n,m;
int Dij(int v)
{
int i,j,min,dir;
for(i=1;i<=n;i++)
{
s[i]=0;
dist[i]=map[v][i];
}
s[v]=1;
dist[v]=0;
for(i=1;i<=n;i++)
{
min=M;
for(j=1;j<=n;j++)
if(s[j]==0&&min>dist[j])
{
dir=j;
min=dist[j];
}
if(min==M)break;
s[dir]=1;
for(j=1;j<=n;j++)
if(s[j]==0&&dist[j]>dist[dir]+map[dir][j])
dist[j]=dist[dir]+map[dir][j];
}
return dist[n];
}
int main()
{
int a,b,c,i,j;
while(scanf("%d%d",&n,&m),n!=0||m!=0)
{
for(i=0;i<109;i++)
for(j=0;j<109;j++)
map[i][j]=M;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b]=map[b][a]=c;
}
a=Dij(1);
printf("%d\n",a);
}
return 0;
}