new
This commit is contained in:
@@ -1 +1,82 @@
|
||||
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();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user