Files
daa-lab/floydWarshall.java
T
2026-05-18 20:36:02 +05:30

83 lines
2.3 KiB
Java

import java.util.*;
public class floydWarshall{
static void print(int u, int v, int[][]next){
if(next[u][v]==-1){
System.out.println("no path exists");
return;
}
System.out.print(u);
while(u!=v){
u = next[u][v];
System.out.print("->"+u);
}
System.out.println();
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("\nEnter number of vertices: ");
int n = sc.nextInt();
int[][] graph = new int[n][n];
System.out.println("Enter distance matrix: ");
for(int i =0;i<n;i++){
for(int j =0;j<n;j++){
graph[i][j] = sc.nextInt();
}
}
int[][] next = new int[n][n];
int[][] dist = new int[n][n];
for(int i = 0;i<n;i++){
for(int j =0;j<n;j++){
dist[i][j] = graph[i][j];
if(graph[i][j]!=999 && i!=j)
next[i][j] = j;
else
next[i][j] = -1;
}
}
for(int k =0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(dist[i][k]!=999 && dist[k][j]!= 999 && dist[i][k]+dist[k][j]< dist[i][j]){
dist[i][j] = dist[i][k] + dist[k][j];
next[i][j] = next[i][k];
}
}
}
}
boolean negativeCycle = false;
for(int i=0;i<n;i++){
if(dist[i][i]<0){
negativeCycle = true;
break;
}
}
if(negativeCycle){
System.out.println("Negative cycle exists");
}else{
System.out.println("No negative cycle");
}
System.out.println("Shortest path matrix");
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(dist[i][j]+ " ");
}
System.out.println();
}
System.out.print("\nEnter source vertex: ");
int u = sc.nextInt();
System.out.print("\nENter dest vertex: ");
int v = sc.nextInt();
System.out.print("\nShortes path: ");
print(u,v,next);
System.out.println("Cost: "+ dist[u][v]);
sc.close();
}
}