#include <stdio.h> #include <string.h> #define MAX 0x7ffffff int map[202][202],dist[202],visit[202]; //最短路径 int Dijsktra(int n,int start,int end) { int i,j,k,min; memset(visit,0,sizeof(visit)); for(i=0;i<n;i++) dist[i]=map[start][i]; visit[start]=1; for (i=1;i<n;i++) { min=MAX; k=1; for (j=0;j<n;j++) if (!visit[j]&&dist[j]<min) { min=dist[j]; k=j;//k保存当前邻接点中距离最小的点的号码 } if(k==end) return min; visit[k]=1;// 表示k点已存入visit集合中 for(j=0;j<n;j++)// 更新dist if(!visit[j]&&dist[j]>(min+map[j][k])) dist[j]=min+map[j][k]; } return dist[end]; } int main() { int n,m,i,j,s,e,ans,x,y,val; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++)//初始化 for(j=0;j<n;j++) { if(i==j) map[i][j]=0; else map[i][j]=MAX; } for (i=0;i<m;i++) { scanf("%d%d%d",&x,&y,&val); if(val<map[x][y]) map[x][y]=map[y][x]=val; } scanf("%d %d",&s,&e); ans=Dijsktra(n,s,e); if(ans==MAX) printf("-1\n"); else printf("%d\n",ans); } return 0; }