The shortest path Dijkstra algorithm adjacency matrix template complexity v^2
#include <iostream>#include<cstring>#include<algorithm>Const intinf=0x3f3f3f3f;Const intmaxn=10000;intn,s;intDIST[MAXN];intCOST[MAXN][MAXN];BOOLVIS[MAXN];voidDijkstraints) {memset (Vis,0,sizeof(VIS)); for(intI=0; i<maxn;i++) Dist[i]=INF; Dist[s]=0; while(1) { intv=-1; for(intu=0; u<n;u++) if(!vis[u]&& (v==-1|| dist[u]<Dist[v]) v=u; if(v==-1) Break; VIS[V]=true; for(intu=0; u<n;u++) Dist[u]=min (dist[u],dist[v]+Cost[v][u]); }}
View Code
The shortest Path Dijkstra algorithm adjacency table template vector implementation. Complexity of VE
#include <iostream>#include<cstring>#include<algorithm>Const intinf=0x3f3f3f3f;Const intmaxn=10000;structedge{intV,w;} G[MAXN];intn,s;intDIST[MAXN];BOOLVIS[MAXN];voidDijkstraints) {memset (Vis,0,sizeof(VIS)); for(intI=0; i<maxn;i++) Dist[i]=INF; Dist[s]=0; while(1) { intv=-1; for(intu=0; u<n;u++) if(!vis[u]&& (v==-1|| dist[u]<Dist[v]) v=u; if(v==-1) Break; VIS[V]=true; for(intu=0; U<g[v].size (); u++) { intto=g[v][u].v; intw=G[V][U].W; Dist[to]=min (dist[to],dist[v]+W); } }}
View Code
Shortest path Dijkstra algorithm adjacency table template priority Queue optimization complexity ELOGV
Const intinf=0x3f3f3f3f;Const intmaxn= +;Const intmaxm=1000000; typedef pair<int,int>P;structedge{intTo,cost;} G[MAXM];intDIST[MAXN];intv,e;voidDijkstraints) {Priority_queue<P,vector<P>,greater<P> >que; Fill (dist,dist+V,inf); Dist[s]=0; while(!Que.empty ()) {p P=que.top (); Que.pop (); intv=P.second; if(Dist[v]<p.first)Continue; for(intI=0; I<g[v].size (); i++) {Edge e=G[v][i]; if(dist[e.to]>dist[v]+e.cost) {dist[e.to]=dist[v]+E.cost; Que.push (P (dist[e.to],e.to)); } } }}
View Code
Shortest path Bell_man algorithm adjacency matrix template complexity VE
#include <iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<string>using namespacestd;Const intinf=0x3f3f3f3f;Const intmaxn= +;Const intmaxm=1000000;structedge{int from, To,w;} E[MAXM];intDIST[MAXN];intv,e;voidBell_man (ints) { for(intI=0; i<v;i++) Dist[i]=INF; Dist[s]=0; while(1) { BOOLUpdate=false; for(intI=0; i<e;i++) {Edge e=E[i]; if(Dist[e. from]!=inf&&dist[e.to]>dist[e. from]+e.cost) {dist[e.to]=dist[e. from]+E.cost; Update=true; } } if(!update) Break; }}
View Code
Shortest path SPFA algorithm template complexity indefinite about O (KE)
Const intmaxn=1010;Const intinf=0x3f3f3f3f;structedge{intV,cost; Edge (int_v=0,int_cost=0): V (_v), cost (_cost) {}};vector<Edge>E[MAXN];voidAddedge (intUintVintW) {E[u].push_back (Edge (V,w));}BOOLVIS[MAXN];BOOLCNT[MAXN];BOOLDIST[MAXN];BOOLSPFA (intSintN) {memset (Vis,0,sizeof(VIS)); for(intI=1; i<=n;i++) dist[i]=INF; Vis[s]=true; Dist[s]=0; Queue<int>que; while(!Que.empty ()) { intu=Que.front (); Que.pop (); Vis[u]=true; for(intI=0; I<e[u].size (); i++) { intv=e[u][i].v; if(dist[v]>dist[u]+e[u][i].cost) {Dist[v]=dist[u]+E[u][i].cost; if(!Vis[v]) {Vis[v]=true; Que.push (v); if(++cnt[v]>N)return false; } } } } return true;}
View Code
The shortest-circuiting template set.