题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544
题目思路:同最短路模版~这次一次就过了。。比上一题强多了。。
AC代码:
#include<stdio.h>
#include<string.h>
#define M 0xfffffff
#define N 105
int n,m,map[N][N],dis[N],vis[N];
void dijkstra()
{
int cur,next,min,i,j=n;
for(i=1;i<=n;i++)
dis[i]=M;
dis[1]=0;
cur=1;
while(1)
{
vis[cur]=1;
min=M;
for(i=1;i<=n;i++)
{
if(vis[i])continue;
if(dis[cur]+map[cur][i]<dis[i])
dis[i]=dis[cur]+map[cur][i];
if(dis[i]<min){
min=dis[i],next=i;
}
}
cur=next;
if(cur==n)break;
}
printf("%d\n",dis[n]);
}
int main()
{
int i,j,a,b,c;
while(~scanf("%d%d",&n,&m),m+n)
{
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=map[j][i]=(i==j?0:M);
for(i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
map[a][b]=map[b][a]=c;
}
dijkstra();
}
return 0;
}
AC截图: