new
This commit is contained in:
@@ -1 +1,82 @@
|
|||||||
import java.util.*;
|
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