#include<stdio.h> int main() { int n=0,m=0,i=0,j=0,k=0,l=0,x[205][205]={0},a=0,b=0,c=0,s=0,t=0,d[205]={0}; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { x[i][j]=0; } } for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); if((x[a][b]==0)||(x[a][b]>c)) { x[a][b]=c; x[b][a]=c; } if(a==b) x[a][b]=0; } scanf("%d%d",&s,&t); for(i=0;i<=n;i++) d[i]=0; d[s]=1; for(i=0;i<n;i++) { j=0x3f3f3f3f;//记录未被标记过的到s最短的点的距离,注意一开始要设置成最大。 l=-1; for(k=0;k<n;k++) { if((x[s][k]>0)&&(x[s][k]<j)&&(d[k]==0)) { j=x[s][k]; l=k; } } if(l>-1) { d[l]=1; for(k=0;k<n;k++) { if((x[l][k]>0)&&(x[l][k]+x[s][l]<x[s][k])) { x[s][k]=x[l][k]+x[s][l]; } if((x[l][k]>0)&&(x[s][k]==0)&&(k!=s)) { x[s][k]=x[l][k]+x[s][l]; } } } } if((x[s][t]!=0)&&(s!=t)) printf("%d ",x[s][t]); else if(s==t) printf("0 "); else printf("-1 "); } }