比较简单;
#include"stdio.h"
#include"string.h"
#define max 99999999
int map[300][300];
int min(int a,int b)
{
return a>b?b:a;
}
void flory(int m)
{
int i,j,k;
for(k=0;k<m;k++)
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
}
}
int main()
{
int m,n,i,j,k,h,p,r1,r2;
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
map[i][j]=max;
map[i][i]=0;
}
for(i=0;i<n;i++)
{
scanf("%d%d%d",&k,&h,&p);
if(map[k][h]>p)//不加这个条件显示错误,真吭。
{
map[k][h]=p;
map[h][k]=p;
}
}
flory(m);
scanf("%d%d",&r1,&r2);
if(map[r1][r2]!=max)
printf("%d\n",map[r1][r2]);
else
printf("-1\n");
}
return 0;
}