题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874
题目思路:最短路模版题。。
AC代码:
#include<stdio.h>
#include<string.h>
#define M 0xfffffff
#define N 205
int n,m,map[N][N],vis[N],dis[N];
void ddd(int a,int b)
{
int i,min,next,cur;
for(i=0;i<n;i++)
dis[i]=M;
dis[a]=0;
cur=a;
while(1)
{
vis[cur]=1;
min=M;
for(i=0;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==b)break;
if(min==M)break;
}
printf("%d\n",dis[b]<M?dis[b]:-1);
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
int i,j,a,b,c;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
map[i][j]=(i==j?0:M);
memset(vis,0,sizeof(vis));
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(c<map[a][b])
map[a][b]=map[b][a]=c;
}
scanf("%d%d",&a,&b);
ddd(a,b);
}
return 0;
}
AC截图: