#include <cstdio> #include <cstring> #include <algorithm> #include <functional>//greater Made from small to large , less anti-//priority_queue<int, vector<int>, less<int> > que equivalent to priority_queue<int> que#include<queue>using namespace Std;const int MAX = 100;const int inf = 0x3f3f3f3f;struct edge{ int to, cost;} typedef pair<int, int> p;int v;vector<edge> g[max];int d[max];//distance from S of void Dijkstra (int s) { priority_ Queue<p, Vector<p>, greater<p> > que; Fill (d, D + V, INF); D[s] = 0; Que.push (P (0, s)); while (!que.empty ()) { p p = que.top (); Que.pop (); int v = p.second; if (D[v] < P.first) continue;//small optimization for (int i = 0; i < g[v].size (); i++) { edge e = g[v][i]; if (d[e.to] > D[v] + e.cost) { d[e.to] = d[v] + e.cost; Que.push (P (d[e.to], e.to));}}}
Algorithm Summary--SPFA (Dijkstra algorithm using the priority queue)