#include <iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<vector>#include<queue>#include<cmath>#include<cstring>using namespacestd;#defineINF 0XFFFFFFF#defineMAXN 40structedge{intE, W; Edge (intE=0,intw=0): E (E), W (w) {}};intPATH[MAXN], N, DIST[MAXN];BOOLVis[maxn];vector<Edge>G[MAXN];voidSPFA (intStar,intEnd) {Edge P, Pn; Dist[star]=0; Queue<Edge>Q; Q.push (Edge (Star,0)); while( !Q.empty ()) {P=Q.front (); Q.pop (); VIS[P.E]=true; intLen =g[p.e].size (); for(intI=0; i<len; i++) {Pn=G[p.e][i]; if(DIST[PN.E] > DIST[P.E] +PN.W) {DIST[PN.E]= DIST[P.E] +PN.W; PATH[PN.E]=P.E; if( !VIS[PN.E]) {Q.push (Pn); VIS[PN.E]=true; } } } }}voidPutpath (intStar,intEnd) { if(Star = =End) {printf ("%d", Star); return ; } putpath (Star, path[end]); printf ("---->%d", End);}voidInit () { for(intI=1; i<=n; i++) {g[i].clear (); Dist[i]=INF; Vis[i]=false; Path[i]=i; }}intMain () {intm; CIN>> N >>m; Init (); for(intI=1; i<=m; i++) { intA, B, C; CIN>> a >> b >>C; G[a].push_back (Edge (b,c)); } SPFA (1, N); printf ("%d\n", Dist[n]); Putpath (1, N); return 0;}/*4 to 2 3 4 1*/
SPFA Shortest Path Printing method