Open in App
Not now

# Java Program for Dijkstra’s Algorithm with Path Printing

• Difficulty Level : Hard
• Last Updated : 22 Aug, 2019

 `import` `java.util.Scanner; ``//Scanner Function to take in the Input Values ` ` `  `public` `class` `Dijkstra ` `{ ` `    ``static` `Scanner scan; ``// scan is a Scanner Object ` ` `  `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int``[] preD = ``new` `int``[``5``]; ` `        ``int` `min = ``999``, nextNode = ``0``; ``// min holds the minimum value, nextNode holds the value for the next node. ` `        ``scan = ``new` `Scanner(System.in); ` `        ``int``[] distance = ``new` `int``[``5``]; ``// the distance matrix ` `        ``int``[][] matrix = ``new` `int``[``5``][``5``]; ``// the actual matrix ` `        ``int``[] visited = ``new` `int``[``5``]; ``// the visited array ` ` `  `        ``System.out.println(``"Enter the cost matrix"``); ` ` `  `        ``for` `(``int` `i = ``0``; i < distance.length; i++) ` `        ``{ ` `            ``visited[i] = ``0``; ``//initialize visited array to zeros ` `            ``preD[i] = ``0``; ` ` `  `            ``for` `(``int` `j = ``0``; j < distance.length; j++) ` `            ``{ ` `                ``matrix[i][j] = scan.nextInt(); ``//fill the matrix ` `                ``if` `(matrix[i][j]==``0``) ` `                    ``matrix[i][j] = ``999``; ``// make the zeros as 999 ` `            ``} ` `        ``} ` ` `  `        ``distance = matrix[``0``]; ``//initialize the distance array ` `        ``visited[``0``] = ``1``; ``//set the source node as visited ` `        ``distance[``0``] = ``0``; ``//set the distance from source to source to zero which is the starting point ` ` `  `        ``for` `(``int` `counter = ``0``; counter < ``5``; counter++) ` `        ``{ ` `            ``min = ``999``; ` `            ``for` `(``int` `i = ``0``; i < ``5``; i++) ` `            ``{ ` `                ``if` `(min > distance[i] && visited[i]!=``1``) ` `                ``{ ` `                    ``min = distance[i]; ` `                    ``nextNode = i; ` `                ``} ` `            ``} ` ` `  `            ``visited[nextNode] = ``1``; ` `            ``for` `(``int` `i = ``0``; i < ``5``; i++) ` `            ``{ ` `                ``if` `(visited[i]!=``1``) ` `                ``{ ` `                    ``if` `(min+matrix[nextNode][i] < distance[i]) ` `                    ``{ ` `                        ``distance[i] = min+matrix[nextNode][i]; ` `                        ``preD[i] = nextNode; ` `                    ``} ` ` `  `                ``} ` ` `  `            ``} ` ` `  `        ``} ` ` `  `        ``for``(``int` `i = ``0``; i < ``5``; i++) ` `            ``System.out.print(``"|"` `+ distance[i]); ` ` `  `        ``System.out.println(``"|"``); ` ` `  `        ``int` `j; ` `        ``for` `(``int` `i = ``0``; i < ``5``; i++) ` `        ``{ ` `            ``if` `(i!=``0``) ` `            ``{ ` ` `  `                ``System.out.print(``"Path = "` `+ i); ` `                ``j = i; ` `                ``do` `                ``{ ` `                    ``j = preD[j]; ` `                    ``System.out.print(``" <- "` `+ j); ` `                ``} ` `                ``while``(j != ``0``); ` `            ``} ` `            ``System.out.println(); ` `        ``} ` `    ``} ` `} `