diff --git a/dijkstra'sAlgo.cpp b/dijkstra'sAlgo.cpp new file mode 100644 index 0000000..2c1027f --- /dev/null +++ b/dijkstra'sAlgo.cpp @@ -0,0 +1,86 @@ + + // Graph - Dijkstra's Algorithm + +#include +#include +#include +using namespace std; +#define INF 0x3f3f3f3f + +class Graph +{ + int V; + list>*adj; +public : + Graph(int V); //constructor + void addEdge(int u,int v,int wt); + void ShortestPath(int source); +}; +Graph::Graph(int V) +{ + this->V=V; + adj=new list< pair >[V]; +} +void Graph::addEdge(int u,int v,int wt) +{ + adj[u].push_back(make_pair(v,wt)); + adj[v].push_back(make_pair(u,wt)); +} +void Graph::ShortestPath(int source) +{ + vector dist(V,INF); + + set> setds; + + setds.insert(make_pair(0,source)); + dist[source]=0; + + while(!setds.empty()) + { + pair temp=*(setds.begin()); + setds.erase(setds.begin()); + + int u=temp.second; + list>::iterator i; + for(i=adj[u].begin();i!=adj[u].end();i++) + { + int v=(*i).first; + int weight=(*i).second; + + if(dist[v]>dist[u]+weight) + { + if(dist[v]!=INF) + setds.erase(setds.find(make_pair(dist[v],v))); + dist[v]=dist[u]+weight; + setds.insert(make_pair(dist[v],v)); + } + } + } + cout<<"Vertex distance from Source :\n"; + for(int i=0;i