Skip to content

Commit b35bfa8

Browse files
authored
Dijkstra’s shortest path algorithm
1 parent 93f7421 commit b35bfa8

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

Dijkstra’s shortest path algorithm

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
2+
// The program is for adjacency matrix representation of the graph
3+
import java.util.*;
4+
import java.lang.*;
5+
import java.io.*;
6+
7+
class ShortestPath {
8+
// A utility function to find the vertex with minimum distance value,
9+
// from the set of vertices not yet included in shortest path tree
10+
static final int V = 9;
11+
int minDistance(int dist[], Boolean sptSet[])
12+
{
13+
// Initialize min value
14+
int min = Integer.MAX_VALUE, min_index = -1;
15+
16+
for (int v = 0; v < V; v++)
17+
if (sptSet[v] == false && dist[v] <= min) {
18+
min = dist[v];
19+
min_index = v;
20+
}
21+
22+
return min_index;
23+
}
24+
25+
// A utility function to print the constructed distance array
26+
void printSolution(int dist[])
27+
{
28+
System.out.println("Vertex \t\t Distance from Source");
29+
for (int i = 0; i < V; i++)
30+
System.out.println(i + " \t\t " + dist[i]);
31+
}
32+
33+
// Function that implements Dijkstra's single source shortest path
34+
// algorithm for a graph represented using adjacency matrix
35+
// representation
36+
void dijkstra(int graph[][], int src)
37+
{
38+
int dist[] = new int[V]; // The output array. dist[i] will hold
39+
// the shortest distance from src to i
40+
41+
// sptSet[i] will true if vertex i is included in shortest
42+
// path tree or shortest distance from src to i is finalized
43+
Boolean sptSet[] = new Boolean[V];
44+
45+
// Initialize all distances as INFINITE and stpSet[] as false
46+
for (int i = 0; i < V; i++) {
47+
dist[i] = Integer.MAX_VALUE;
48+
sptSet[i] = false;
49+
}
50+
51+
// Distance of source vertex from itself is always 0
52+
dist[src] = 0;
53+
54+
// Find shortest path for all vertices
55+
for (int count = 0; count < V - 1; count++) {
56+
// Pick the minimum distance vertex from the set of vertices
57+
// not yet processed. u is always equal to src in first
58+
// iteration.
59+
int u = minDistance(dist, sptSet);
60+
61+
// Mark the picked vertex as processed
62+
sptSet[u] = true;
63+
64+
// Update dist value of the adjacent vertices of the
65+
// picked vertex.
66+
for (int v = 0; v < V; v++)
67+
68+
// Update dist[v] only if is not in sptSet, there is an
69+
// edge from u to v, and total weight of path from src to
70+
// v through u is smaller than current value of dist[v]
71+
if (!sptSet[v] && graph[u][v] != 0 && dist[u] != Integer.MAX_VALUE && dist[u] + graph[u][v] < dist[v])
72+
dist[v] = dist[u] + graph[u][v];
73+
}
74+
75+
// print the constructed distance array
76+
printSolution(dist);
77+
}
78+
79+
// Driver method
80+
public static void main(String[] args)
81+
{
82+
/* Let us create the example graph discussed above */
83+
int graph[][] = new int[][] { { 0, 4, 0, 0, 0, 0, 0, 8, 0 },
84+
{ 4, 0, 8, 0, 0, 0, 0, 11, 0 },
85+
{ 0, 8, 0, 7, 0, 4, 0, 0, 2 },
86+
{ 0, 0, 7, 0, 9, 14, 0, 0, 0 },
87+
{ 0, 0, 0, 9, 0, 10, 0, 0, 0 },
88+
{ 0, 0, 4, 14, 10, 0, 2, 0, 0 },
89+
{ 0, 0, 0, 0, 0, 2, 0, 1, 6 },
90+
{ 8, 11, 0, 0, 0, 0, 1, 0, 7 },
91+
{ 0, 0, 2, 0, 0, 0, 6, 7, 0 } };
92+
ShortestPath t = new ShortestPath();
93+
t.dijkstra(graph, 0);
94+
}
95+
}
96+

0 commit comments

Comments
 (0)