1. Single Source shortest circuit problem
①dijkstra algorithm:
Normal version:
#defineMem (b) memset ((a), (b), sizeof (a))Const intinf=0x3f3f3f3f;Const intn= the;intG[n][n];intD[n];BOOLVis[n];intn,m;voidDijkstra (ints) {mem (D,inf); Mem (Vis,false); D[s]=0; while(true) { intv=-1; for(intI=1; i<=n;i++) if(!vis[i]&& (v==-1|| D[I]<D[V]) v=i; if(v==-1) Break; VIS[V]=true; for(intI=1; i<=n;i++) {D[i]=min (d[i],d[v]+G[v][i]); } }}View Code
Example: hdu2544 shortest circuit
Code:
#include <bits/stdc++.h>using namespacestd;#definell Long Long#defineLS rt<<1,l,m#defineRS Rt<<1|1,m+1,r#definePB Push_back#defineMem (b) memset ((a), (b), sizeof (a))Const intinf=0x3f3f3f3f;Const intn= the;intG[n][n];intD[n];BOOLVis[n];intn,m;voidDijkstra (ints) {mem (D,inf); Mem (Vis,false); D[s]=0; while(true) { intv=-1; for(intI=1; i<=n;i++) if(!vis[i]&& (v==-1|| D[I]<D[V]) v=i; if(v==-1) Break; VIS[V]=true; for(intI=1; i<=n;i++) {D[i]=min (d[i],d[v]+G[v][i]); } }}intMain () { while(~SCANF ("%d%d", &n,&m) &&n&&m) {mem (g,inf); for(intI=0; i<m;i++) { intA,b,c; CIN>>a>>b>>C; G[A][B]=B; G[b][a]=C; } Dijkstra (1); printf ("%d\n", D[n]); } return 0;} View Code
Not to be continued ...
Algorithm note-The shortest-path algorithm