简单题 不解释
代码:
#include<stdio.h>
#include<iostream>#define INF 300000
using namespace std;
int map[200][200];
int main()
{
int N,M;
while(scanf("%d%d",&N,&M)!=EOF)
{
int a,b,c,i,j,k;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
map[i][j]=(i==j)?0:INF;//点到自己的距离为0;到其他点的距离最大
}
}
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;
}
}
int S,T;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
if(i==j)continue;
for(k=0;k<N;k++)
if(map[j][k]>map[j][i]+map[i][k])//两点之间的最小值;
{
map[j][k]=map[j][i]+map[i][k];
}
}
scanf("%d%d",&S,&T);
printf("%d\n",(map[S][T]!=INF?map[S][T]:-1));
}
return 0;
}