0% found this document useful (0 votes)
22 views6 pages

Dijkstra Program

Uploaded by

Akarsh AK
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views6 pages

Dijkstra Program

Uploaded by

Akarsh AK
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

4.

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

// C++ Program to find Dijkstra's shortest path using


// priority_queue in STL
#include <iostream>
#include<list>
#include<queue>
using namespace std;

// iPair ==> Integer Pair


typedef pair<int, int> iPair;

// This class represents a directed graph using adjacency list representation


class Graph {
int V; // No. of vertices
// In a weighted graph, we need to store vertex and weight pair for every edge
list<pair<int, int> >* adj;
public:
Graph(int V); // Constructor
// function to add an edge to graph
void addEdge(int u, int v, int w);
// prints shortest path from s
void shortestPath(int s);
};
// Allocates memory for adjacency list
Graph::Graph(int V)
{
this->V = V;
adj = new list<iPair>[V];
}

void Graph::addEdge(int u, int v, int w)


{
adj[u].push_back(make_pair(v, w));
adj[v].push_back(make_pair(u, w));
}

// Prints shortest paths from src to all other vertices


void Graph::shortestPath(int src)
{
// Create a priority queue to store vertices that are being preprocessed. This is weird syntax in C++.
priority_queue<iPair, vector<iPair>, greater<iPair> > pq;

// 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();

// 'i' is used to get all adjacent vertices of a vertex


list<pair<int, int> >::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); ++i) {
// Get vertex label and weight of current adjacent of u.
int v = (*i).first;
int weight = (*i).second;
// If there is shorted path to v through u.
if (dist[v] > dist[u] + weight) {
// Updating distance of v
dist[v] = dist[u] + weight;
cout<<dist[v]<<"---"<< v<<endl;
pq.push(make_pair(dist[v], v));
}
}
}

// Print shortest distances stored in dist[]


cout<<"Vertex Distance from Source"<<endl;
for (int i = 0; i < V; ++i)
cout<<i<<” ”<<dist[i]<<endl;
}

// 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 ===

You might also like