http://acm.hdu.edu.cn/showproblem.php?pid=1874
第一次知道有个东西叫重边。。。囧
View Code
#include <iostream> #include <string.h> using namespace std; const int INF=1000000000; int map[210][210]; int n,m,f; int dis[210],vis[210]; int Dijkstra(int s,int t) { for(int i=0;i<n;i++) dis[i]=INF; memset(vis,0,sizeof(vis)); dis[s]=0; for(int i=0;i<n;i++) { int ans=INF,u; for(int j=0;j<n;j++) if(!vis[j] && dis[j]<ans) { ans=dis[j]; u=j; } vis[u]=1; if(u==t){ f=1; return ans; } for(int j=0;j<n;j++) if(map[u][j]!=INF && dis[u]+map[u][j]<dis[j]) dis[j]=dis[u]+map[u][j]; } } int main() { while(~scanf("%d%d",&n,&m)) { f=0; int s,t,k; for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) map[i][j]=INF; for(int i=0;i<m;i++) { scanf("%d%d%d",&s,&t,&k); if(map[s][t]>k) map[s][t]=map[t][s]=k; } int a,b; scanf("%d%d",&a,&b); int ans=Dijkstra(a,b); if(f) printf("%d\n",ans); else puts("-1"); } return 0; }