#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace STD;Const intinf=1<< -;Const intn= $+5;intN,m,vis[n],edge[n][n],path[n],dist[n];voidDijkstra (intV0) {intI,j,k,u,minx; for(i=0; i<n; i++) {Dist[i]=edge[v0][i]; vis[i]=0;if(dist[i]<inf&&i!=v0) Path[i]=v0;Elsepath[i]=-1; } vis[v0]=1; dist[v0]=0; for(i=0; i<n-1; i++) {minx=inf,u=v0; for(j=0; j<n; J + +) {if(!vis[j]&&dist[j]<minx) {MINX=DIST[J]; U=j; } }//if (minx==inf) break;vis[u]=1; for(k=0; k<n; k++) {if(!vis[k]&&edge[u][k]<inf&&dist[u]+edge[u][k]<dist[k]) {Dist[k]=dist[u]+edge[u][k]; Path[k]=u; } } }}intMain () {intI,j,k,u,v,w,s,t; while(~scanf("%d%d", &n,&m)) {if(n==0&&m==0) Break;memset(Edge,0,sizeof(Edge)); for(i=0; i<m; i++) {scanf("%d%d%d", &u,&v,&w); u--;v--;if(edge[u][v]==0|| EDGE[U][V]>W) Edge[u][v]=edge[v][u]=w;//edge[u][v]=w;}//scanf ("%d%d", &s,&t); for(i=0; i<n; i++) for(j=0; j<n; J + +) {if(I==J) edge[i][j]=0;Else if(edge[i][j]==0) Edge[i][j]=inf; } Dijkstra (0);//if (s==t) printf ("0\n"); //else if (path[t]!=-1) printf("%d\n", dist[n-1]);//else printf (" -1\n");}return 0;}
HDU 2544 Shortest circuit