CC-20 : Implement Dijkstra’s shortest path algorithm.
Description:
Dijkstra’s shortest path algorithm helps to find path with shortest distance from a given source vertex to all other vertices in the graph. Given a matrix which contains the distances between vertices, Implement Dijkstra’s algorithm and execute it for input graph.
Test cases and expected outputs:
| Input Parameters | Expected outputs |
|---|---|
| Input graph matrix indicating distances between vertices : 0,4,6,8, 0,0,1,2, 0,0,0,1, 0,0,0,0, |
Shortest distances from 0 to rest of vertices: Distance from 0 to 0 is 0 Distance from 0 to 1 is 4 Distance from 0 to 2 is 5 Distance from 0 to 3 is 6 |
Pseudocode:
Dijkstra(int vertices,int[][] matrix, int src) method:
| Initialize integer array named visited, to hold information whether the vertices have been visited. |
| Initialize integer array named distances , to hold distances from src node to other nodes. |
| Iterate through vertices using a for loop with iIdx as loop variable and iterate with value of iIdx from 0 to vertices count-1:
Set visited[iIdx]=0.
Set dist[Idx] to Integer.MaxValue.
|
| Set dist[src]=0. |
| Iterate through vertices using a for loop with iIdx as loop variable and iterate with value of iIdx from 0 to vertices count-1:
Set in variable vertex1 to return value from findMinDistance(dist, visited).
Set visited[vertex1]=1.
Iterate through vertices using a for loop with vertex2 as loop variable and iterate with value of vertex2 from 0 to vertices count-1:
If vertex2 is not visited and distance from vertex1 to vertex2 is not 0 and sum of distances from src to vertex1 and distance from vertex1 to vertex2 is lesser than distance from src to vertex2 then:
Set dist[vertext2]= sum of distances from src to vertex1 and distance from vertex1 to vertex2.
|
| Using a for loop iterate through dist array and print out the distance from src to other vertices. |
findMinDistance(int[] dist, int[] visited) method:
| Initialize int variable minDist to Integer.MaxValue. |
| Initialize int variable minDistVertex to -1. |
| Iterate through input dist[] array using a for loop with iIdx as loop variable and iterate with value of iIdx from 0 to dist.length:
If visited[iIdx] and dist[iIdx] < minDist:
Set minDist[iIdx]=dist[iIdx].
minDistanceVertex=iIdx.
|
| return minDistanceVertex. |
Code:
public void dijkstra(int vertices, int[][] matrix, int src){
int[] visited=new int[vertices];
int [] dist=new int[vertices];
for(int iIdx=0; iIdx < vertices;iIdx++) {
visited[iIdx]=0;
dist[iIdx]=Integer.MAX_VALUE;
}
dist[src]=0;
for(int iIdx=0; iIdx < vertices;iIdx++) {
int vertex1=findMinDist(dist,visited);
visited[vertex1]=1;
for(int vertex2=0; vertex2 < vertices;vertex2++) {
if ((visited[vertex2]==0) && (matrix[vertex1][vertex2] !=0)
&& (dist[vertex1]+matrix[vertex1][vertex2] < dist[vertex2])) {
dist[vertex2]=dist[vertex1]+matrix[vertex1][vertex2];
}
}
}
for(int iIdx=0; iIdx < vertices;iIdx++) {
System.out.println("Distance from "+src+ " to "+ iIdx + " is "+dist[iIdx]);
}
}
private int findMinDist(int[] dist, int[] visited) {
int minDist=Integer.MAX_VALUE;
int minDistVertex=-1;
for(int iIdx=0; iIdx < dist.length;iIdx++) {
if ((visited[iIdx]==0) && (dist[iIdx] < minDist)) {
minDist=dist[iIdx];
minDistVertex=iIdx;
}
}
return minDistVertex;
}
Click here to download and run code and test cases !
| About Us | Privacy Policy | Contact us |