0% found this document useful (0 votes)
21 views

Exp 3 AA

The document discusses implementing Dijkstra's algorithm to find the shortest path between nodes in a graph. It provides an explanation of Dijkstra's algorithm, then shows C code to implement it on a sample graph. The code finds the shortest path from each node to a source node by iteratively updating distance values.
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)
21 views

Exp 3 AA

The document discusses implementing Dijkstra's algorithm to find the shortest path between nodes in a graph. It provides an explanation of Dijkstra's algorithm, then shows C code to implement it on a sample graph. The code finds the shortest path from each node to a source node by iteratively updating distance values.
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

Mahavir Education Trust's

SHAH & ANCHOR KUTCHHI ENGINEERING COLLEGE


Chembur, Mumbai - 400 088

UG Programme in Electronics and Computer Science

EXPERIMENT NO : 3

AIM: Implementation of Dijkstra’s algorithms.


Required Software/ Software Tool:
- Windows Operating System
-C/C++/JAVA
Theory:
Dijkstra’s algorithm
Dijkstra’s algorithm solves the single-source shortest-paths problem on a weighted, directed
graph.
G = (V, E) for the case in which all edge weights are nonnegative. Therefore, we assume that
w(u,
v) ≥ 0 for each edge (u, v) ∈ E.
Dijkstra’s algorithm maintains a set S of vertices whose final shortest-path weights from the
sources have already been determined. The algorithm repeatedly selects the vertex u ∈ V − S
with the minimum shortest-path estimate, adds u to S, and relaxes all edges leaving u. In the
following implementation, we use a min-priority queue Q of vertices, keyed by their d values.
DIJKSTRA (G,w, s)
1 INITIALIZE-SINGLE-SOURCE (G, s)
2 S ← ∅ 3 Q ← V[G]
4 while Q != ∅ do u ← EXTRACT-MIN(Q)
6 S ← S ∪ {u} 7 for each vertex v ∈ Adj[u]
8 do RELAX (u, v, w)
Dijkstra’s algorithm relaxes edges as shown.
Mahavir Education Trust's

SHAH & ANCHOR KUTCHHI ENGINEERING COLLEGE


Chembur, Mumbai - 400 088

UG Programme in Electronics and Computer Science


Mahavir Education Trust's

SHAH & ANCHOR KUTCHHI ENGINEERING COLLEGE


Chembur, Mumbai - 400 088

UG Programme in Electronics and Computer Science

Algorithm:
1. Mark the source node with a current distance of 0 and the rest with infinity.
2. Set the non-visited node with the smallest current distance as the current node.
3. For each neighbour, N of the current node adds the current distance of the adjacent
node with the weight of the edge connecting 0->1. If it is smaller than the current
distance of Node, set it as the new current distance of N.
4. Mark the current node 1 as visited.
5. Go to step 2 if there are any nodes are unvisited.
Mahavir Education Trust's

SHAH & ANCHOR KUTCHHI ENGINEERING COLLEGE


Chembur, Mumbai - 400 088

UG Programme in Electronics and Computer Science

Implementing the Solution Writing Source Code:


#include <limits.h>
#include <stdbool.h>
#include <stdio.h>
//Rajas Karandikar
// Number of vertices in the graph
#define V 9

// A utility function to find the vertex with minimum


// distance value, from the set of vertices not yet included
// in shortest path tree
int minDistance(int dist[], bool sptSet[])
{
// Initialize min value
int min = INT_MAX, min_index;

for (int v = 0; v < V; v++)


if (sptSet[v] == false && dist[v] <= min)
min = dist[v], min_index = v;

return min_index;
}

// A utility function to print the constructed distance


// array
void printSolution(int dist[])
{
printf("Vertex \t\t Distance from Source\n");
for (int i = 0; i < V; i++)
printf("%d \t\t\t\t %d\n", i, dist[i]);
}

// Function that implements Dijkstra's single source


// shortest path algorithm for a graph represented using
// adjacency matrix representation
void dijkstra(int graph[V][V], int src)
{
int dist[V]; // The output array. dist[i] will hold the
// shortest
// distance from src to i

bool sptSet[V]; // sptSet[i] will be true if vertex i is


// included in shortest
Mahavir Education Trust's

SHAH & ANCHOR KUTCHHI ENGINEERING COLLEGE


Chembur, Mumbai - 400 088

UG Programme in Electronics and Computer Science

// path tree or shortest distance from src to i is


// finalized

// Initialize all distances as INFINITE and stpSet[] as


// false
for (int i = 0; i < V; i++)
dist[i] = INT_MAX, sptSet[i] = false;

// Distance of source vertex from itself is always 0


dist[src] = 0;

// Find shortest path for all vertices


for (int count = 0; count < V - 1; count++) {
// Pick the minimum distance vertex from the set of
// vertices not yet processed. u is always equal to
// src in the first iteration.
int u = minDistance(dist, sptSet);

// Mark the picked vertex as processed


sptSet[u] = true;

// Update dist value of the adjacent vertices of the


// picked vertex.
for (int v = 0; v < V; v++)

// Update dist[v] only if is not in sptSet,


// there is an edge from u to v, and total
// weight of path from src to v through u is
// smaller than current value of dist[v]
if (!sptSet[v] && graph[u][v]
&& dist[u] != INT_MAX
&& dist[u] + graph[u][v] < dist[v])
dist[v] = dist[u] + graph[u][v];
}

// print the constructed distance array


printSolution(dist);
}

// driver's code
int main()
{
/* Let us create the example graph discussed above */
int graph[V][V] = { { 0, 4, 0, 0, 0, 0, 0, 8, 0 },
{ 4, 0, 8, 0, 0, 0, 0, 11, 0 },
Mahavir Education Trust's

SHAH & ANCHOR KUTCHHI ENGINEERING COLLEGE


Chembur, Mumbai - 400 088

UG Programme in Electronics and Computer Science

{ 0, 8, 0, 7, 0, 4, 0, 0, 2 },
{ 0, 0, 7, 0, 9, 14, 0, 0, 0 },
{ 0, 0, 0, 9, 0, 10, 0, 0, 0 },
{ 0, 0, 4, 14, 10, 0, 2, 0, 0 },
{ 0, 0, 0, 0, 0, 2, 0, 1, 6 },
{ 8, 11, 0, 0, 0, 0, 1, 0, 7 },
{ 0, 0, 2, 0, 0, 0, 6, 7, 0 } };

// Function call
dijkstra(graph, 0);

return 0;
}

Input and Output:

Conclusion: Hence we implemented Dijkstra’s Algorithm using C

You might also like