69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#define MAX 20000
int dist[200];
int node[200][200];
int sign[200];
int N,M,A,B,X,S,T;
int main()
{
int i,j,min,u;
while(scanf("%d%d",&N,&M)!=EOF)
{
for(i=0;i<N;i++)
for(j=0;j<N;j++)
node[i][j]=MAX;
for(i=0;i<M;i++)
{
scanf("%d%d%d",&A,&B,&X);
node[A][B]=X;
node[B][A]=X;
}
scanf("%d%d",&S,&T);
for(i=0;i<N;i++)
{
sign[i]=0;
dist[i]=node[S][i];
}
sign[S]=1;
for(j=1;j<N&&!sign[T];j++)
{
min=MAX;
for(i=0;i<N;i++)
{
if(!sign[i]&&dist[i]<min)
{
min=dist[i];
u=i;
}
}
sign[u]=1;
for(i=0;i<N;i++)
{
if(!sign[i]&&dist[u]+node[u][i]<dist[i])
dist[i]=dist[u]+node[u][i];
}
}
if(dist[T]!=MAX)
printf("%d\n",dist[T]);
else
printf("-1\n");
}
return 0;
}