题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1874
C语言源码:
#include<stdio.h>
#include<limits.h>
#define maxsize 300
int E[maxsize][maxsize];
int visited[maxsize];
int length[maxsize];
int main()
{
int n,m,i,j,min,fmin,a,b,len;
while(scanf("%d %d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
E[i][j]=INT_MAX;
visited[i]=0;
length[i]=INT_MAX;
}
for(i=0;i<m;i++)
{
scanf("%d %d %d",&a,&b,&len);
if(len<E[a][b])
{
E[a][b]=len;
E[b][a]=len;
}
}
scanf("%d %d",&a,&b);
visited[a]=1;
length[a]=0;
i=a;
while(i!=b)
{
for(j=0;j<n;j++)
{
if(E[i][j]!=INT_MAX&&visited[j]==0&&length[i]+E[i][j]<length[j])
length[j]=length[i]+E[i][j];
}
min=INT_MAX;
fmin=-1;
for(j=0;j<n;j++)
{
if(visited[j]==0&&length[j]<min)
{
min=length[j];
fmin=j;
}
}
if(min==INT_MAX)
break;
else
{
visited[fmin]=1;
i=fmin;
}
}
if(i!=b)
printf("-1\n");
else
printf("%d\n",length[b]);
}
}