From b52dedce6ecfe212b2b30aace7be770093bd8ace Mon Sep 17 00:00:00 2001 From: Shivam Singh Rajput Date: Tue, 9 Oct 2018 21:51:25 +0530 Subject: [PATCH] Optimized Algorithm --- DIJKSTRA O((V+E) log V).cpp | 41 +++++++++++++++---------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/DIJKSTRA O((V+E) log V).cpp b/DIJKSTRA O((V+E) log V).cpp index 99eb82c..c93f3cf 100644 --- a/DIJKSTRA O((V+E) log V).cpp +++ b/DIJKSTRA O((V+E) log V).cpp @@ -4,47 +4,38 @@ #include #include #include +#define ve vector using namespace std; -vector > adj, W; -vector sd; int SIZE; -struct cmp -{ - bool operator()(const int &p, const int &q)const - { - if (sd[p] < sd[q]) - return true; - else - if (sd[p] == sd[q]) - return p < q; - return false; - } -}; class DIJKSTRA { + ve>> adj; + ve sd; public: bool add(int u, int v, int w = 1) { - adj[u].push_back(v), W[u].push_back(w); - adj[v].push_back(u), W[v].push_back(w); + adj[u].push_back({v,w}) ; + adj[v].push_back({u,w}) return true; } void run(int Source) // Zero indexed { sd[Source] = 0; - set S; - S.insert(Source); + set> S; + S.insert({0,Source}); + ve inq(adj.resize()); while (!S.empty()) { - int P = *S.begin(); + auto P = *S.begin(); S.erase(S.begin()); - for (int i = 0; isd[P] + W[P][i]) + if (!inq[x.first] && sd[x.first]> x.second + P.first) { - S.erase(adj[P][i]); - sd[adj[P][i]] = sd[P] + W[P][i]; - S.insert(adj[P][i]); + S.erase({sd[x.first],x.first}); + sd[x.first] = x.second+P.first; + S.insert({sd[x.first],x.first}); } } } @@ -55,7 +46,7 @@ class DIJKSTRA run(y); for (int i = 0; i