题意非常简单,从n到1的最短路径。 但是要注意,输入是先输入m再输入n的。即第一行是m n。
#include<stdio.h>
#define MX 1000000000
int dist[2010],map[2010][2010],n,m;
bool s[2010];
int dijkstra(int v0)
{
for(int i=1;i<=n;i++)
{
dist[i]=map[v0][i];
s[i]=0;
}
s[v0]=1;dist[v0]=0;
for(int i=0;i<n-1;i++)
{
int min=MX,u;
for(int j=1;j<=n;j++)
if(!s[j]&&min>dist[j])
{
min=dist[j];
u=j;
}
s[u]=1;
for(int j=1;j<=n;j++)
if(!s[j]&&map[u][j]<MX&&map[u][j]+dist[u]<dist[j])
dist[j]=dist[u]+map[u][j];
if(u==1)
return dist[u];
}
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=MX;
for(int i=0;i<m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]>c)
map[a][b]=map[b][a]=c;
}
printf("%d\n",dijkstra(n));
}
return 0;
}