|  | 
|  | 1 | +// A Java program for Dijkstra's single source shortest path algorithm.  | 
|  | 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[], int n)  | 
|  | 27 | +{  | 
|  | 28 | +System.out.println("Vertex Distance from Source");  | 
|  | 29 | +for (int i = 0; i < V; i++)  | 
|  | 30 | +System.out.println(i + " tt " + 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 &&  | 
|  | 72 | +dist[u] != Integer.MAX_VALUE && dist[u] + graph[u][v] < dist[v])  | 
|  | 73 | +dist[v] = dist[u] + graph[u][v];  | 
|  | 74 | +}  | 
|  | 75 | + | 
|  | 76 | +// print the constructed distance array  | 
|  | 77 | +printSolution(dist, V);  | 
|  | 78 | +}  | 
|  | 79 | + | 
|  | 80 | +// Driver method  | 
|  | 81 | +public static void main(String[] args)  | 
|  | 82 | +{  | 
|  | 83 | +/* Let us create the example graph discussed above */ | 
|  | 84 | +int graph[][] = new int[][] { { 0, 4, 0, 0, 0, 0, 0, 8, 0 },  | 
|  | 85 | +{ 4, 0, 8, 0, 0, 0, 0, 11, 0 },  | 
|  | 86 | +{ 0, 8, 0, 7, 0, 4, 0, 0, 2 },  | 
|  | 87 | +{ 0, 0, 7, 0, 9, 14, 0, 0, 0 },  | 
|  | 88 | +{ 0, 0, 0, 9, 0, 10, 0, 0, 0 },  | 
|  | 89 | +{ 0, 0, 4, 14, 10, 0, 2, 0, 0 },  | 
|  | 90 | +{ 0, 0, 0, 0, 0, 2, 0, 1, 6 },  | 
|  | 91 | +{ 8, 11, 0, 0, 0, 0, 1, 0, 7 },  | 
|  | 92 | +{ 0, 0, 2, 0, 0, 0, 6, 7, 0 } };  | 
|  | 93 | +ShortestPath t = new ShortestPath();  | 
|  | 94 | +t.dijkstra(graph, 0);  | 
|  | 95 | +}  | 
|  | 96 | +}  | 
|  | 97 | + | 
0 commit comments