#include<stdio.h> #include<string.h> #include<stdlib.h> int inf=0x7fffffff; int map[210][210],hash[210],dis[210]; int n,m,s,t; void dijstra() { dis[s]=0; for(int i=0;i<n;i++) { int t=inf,pos; for(int j=0;j<n;j++) { if(hash[j]==0) { if(t>dis[j]) { t=dis[j]; pos=j; } } } hash[pos]=1; if(pos==n) break; for(int j=0;j<n;j++) { if(hash[j]==0) { if(map[pos][j]!=inf&&dis[pos]+map[pos][j]<dis[j]) dis[j]=map[pos][j]+dis[pos]; } } } } int main() { int x,y,v; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<n;i++) { dis[i]=inf; hash[i]=0; for(int j=0;j<n;j++) { map[i][j]=inf; } } for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&v); if(x!=y&&map[x][y]>v) { map[x][y]=map[y][x]=v; } } scanf("%d%d",&s,&t); dijstra(); if(dis[t]!=inf)//要判断s到t是否有路。 { printf("%d\n",dis[t]); } else { printf("-1\n"); } } //system("pause"); return 0; }
编辑器加载中...