Dijkstra Program
Dijkstra Program
Design and implement C/C++ Program to find shortest paths from a given vertex
in a weighted connected graph to other vertices using Dijkstra's algorithm.
Iterators:
Iterators are used to point to the memory addresses of the STL containers. Apart from that, an
iterator is also used to iterate over the data structures. It can access or assign values that a
pointer is unable to do.
Pointers in C++ can also point to functions, whereas the iterators just serve the purpose of
performing operations on the STL containers.
Syntax to declare an iterator in C++:
type_container :: iterator itr_name
// Create a vector for distances and initialize all // distances as infinite (INF)
vector<int> dist(V, INF);
// Insert source itself in priority queue and initialize // its distance as 0.
pq.push(make_pair(0, src));
dist[src] = 0;
int j=0;
/* Looping till priority queue becomes empty (or all distances are not finalized) */
while (!pq.empty()) {
// The first vertex in pair is the minimum distance vertex, extract it from priority queue.
// vertex label is stored in second of pair (it has to be done this way to keep the vertices
// sorted distance (distance must be first item in pair)
int u = pq.top().second;
cout<<"u = "<<u<<endl;
pq.pop();
// Driver's code
int main()
{
// create the graph given in above figure
int V = 9;
Graph g(V);
// making above shown graph
g.addEdge(0, 1, 4);
g.addEdge(0, 7, 8);
g.addEdge(1, 2, 8);
g.addEdge(1, 7, 11);
g.addEdge(2, 3, 7);
g.addEdge(2, 8, 2);
g.addEdge(2, 5, 4);
g.addEdge(3, 4, 9);
g.addEdge(3, 5, 14);
g.addEdge(4, 5, 10);
g.addEdge(5, 6, 2);
g.addEdge(6, 7, 1);
g.addEdge(6, 8, 6);
g.addEdge(7, 8, 7);
// Function call
g.shortestPath(0);
return 0;
}
Output
u=0
4---1
8---7
u=1
12---2
u=7
9---6
15---8
u=6
11---5
u=5
25---3
21---4
u=2
19---3
14---8
u=8
u=8
u=3
u=4
u=3
Vertex Distance from Source
0 0
1 4
2 12
3 19
4 21
5 11
6 9
7 8
8 14
=== Code Execution Successful ===