#include<stdio.h> #include<string.h> int arc[200][200]; int cost[200]; int INF=100000; int n,s,t; void spfa() { int x,i; int q[200]; int visited[200]; int front=0; int rear=0; memset(q,0,sizeof(q));//模拟队列 memset(visited,0,sizeof(visited));//开始所有的点都没有访问 cost[s]=0;//开始点权值为0 q[++rear]=s;//入队 visited[s]=1;//开始点访问 while(front!=rear) {// front=(front+1)%(n+1);//出队 x=q[front]; visited[x]=0;// for(i=0;i<n;i++) if(cost[x]+arc[x][i]<cost[i])//更新最短路 { cost[i]=arc[x][i]+cost[x];// if(!visited[i]) { rear=(rear+1)%(n+1); q[rear]=i; visited[i]=1; } } } } int main() { int m; while(scanf("%d%d",&n,&m)!=EOF) { int i,j,k,d; for(i=0;i<n;i++) for(j=0;j<n;j++) arc[i][j]=INF; for(k=0;k<m;k++) { scanf("%d%d%d",&i,&j,&d); if(arc[i][j]>d) arc[i][j]=arc[j][i]=d; } scanf("%d%d",&s,&t); for(i=0;i<n;i++) cost[i]=INF; spfa(); if(cost[t]<INF) printf("%d\n",cost[t]); else printf("-1\n"); } return 0; }