Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions Dijkstra_algo.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#include <stdio.h>
#include <limits.h>

#define V 9 // Number of vertices in the graph

// 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[], int sptSet[]) {
int min = INT_MAX, min_index;
for (int v = 0; v < V; v++)
if (!sptSet[v] && dist[v] <= min)
min = dist[v], min_index = v;
return min_index;
}

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

// Function that implements Dijkstra's algorithm for a graph
// represented using adjacency matrix
void dijkstra(int graph[V][V], int src) {
int dist[V]; // Output array. dist[i] holds shortest distance from src to i
int sptSet[V]; // sptSet[i] true if vertex i is included in shortest path tree

// Initialize all distances as infinite and sptSet[] as false
for (int i = 0; i < V; i++)
dist[i] = INT_MAX, sptSet[i] = 0;

dist[src] = 0; // Distance of source vertex from itself is always 0

// Find shortest path for all vertices
for (int count = 0; count < V - 1; count++) {
int u = minDistance(dist, sptSet); // Pick the minimum
sptSet[u] = 1; // Mark picked vertex as processed

for (int v = 0; v < V; v++)
// Update dist[v] if not in sptSet, there is an edge from u to v,
// and total weight of path from src to v through u is smaller
if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX
&& dist[u] + graph[u][v] < dist[v])
dist[v] = dist[u] + graph[u][v];
}
printSolution(dist, V);
}

int main() {
// Example graph
int graph[V][V] = {
{0, 4, 0, 0, 0, 0, 0, 8, 0},
{4, 0, 8, 0, 0, 0, 0, 11, 0},
{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, 0, 10, 0, 2, 0, 0},
{0, 0, 0, 14, 0, 2, 0, 1, 6},
{8, 11, 0, 0, 0, 0, 1, 0, 7},
{0, 0, 2, 0, 0, 0, 6, 7, 0}
};
dijkstra(graph, 0); // Find shortest paths from vertex 0
return 0;
}