Update FloydWarshall.java

This commit is contained in:
Ayush Nagar
2018-05-06 17:16:19 +05:30
committed by GitHub
parent 35a4bd314d
commit ba22b1c6b8

View File

@ -1,173 +1,78 @@
import java.util.Scanner; import java.util.Scanner;
public class FloydWarshall public class FloydWarshall
{ {
private int DistanceMatrix[][];
private int distancematrix[][]; private int numberofvertices;//number of vertices in the graph
private int numberofvertices;
public static final int INFINITY = 999; public static final int INFINITY = 999;
public FloydWarshall(int numberofvertices) public FloydWarshall(int numberofvertices)
{ {
DistanceMatrix = new int[numberofvertices + 1][numberofvertices + 1];//stores the value of distance from all the possible path form the source vertex to destination vertex
distancematrix = new int[numberofvertices + 1][numberofvertices + 1]; Arrays.fill(DistanceMatrix, 0);
this.numberofvertices = numberofvertices; this.numberofvertices = numberofvertices;
} }
public void floydwarshall(int AdjacencyMatrix[][])//calculates all the distances from source to destination vertex
public void floydwarshall(int adjacencymatrix[][])
{ {
for (int source = 1; source <= numberofvertices; source++) for (int source = 1; source <= numberofvertices; source++)
{ {
for (int destination = 1; destination <= numberofvertices; destination++) for (int destination = 1; destination <= numberofvertices; destination++)
{ {
DistanceMatrix[source][destination] = AdjacencyMatrix[source][destination];
distancematrix[source][destination] = adjacencymatrix[source][destination];
} }
} }
for (int intermediate = 1; intermediate <= numberofvertices; intermediate++) for (int intermediate = 1; intermediate <= numberofvertices; intermediate++)
{ {
for (int source = 1; source <= numberofvertices; source++) for (int source = 1; source <= numberofvertices; source++)
{ {
for (int destination = 1; destination <= numberofvertices; destination++) for (int destination = 1; destination <= numberofvertices; destination++)
{ {
if (DistanceMatrix[source][intermediate] + DistanceMatrix[intermediate][destination]
if (distancematrix[source][intermediate] + distancematrix[intermediate][destination] < DistanceMatrix[source][destination])//if the new distance calculated is less then the earlier shortest calculated distance it get replaced as new shortest distance
DistanceMatrix[source][destination] = DistanceMatrix[source][intermediate]
< distancematrix[source][destination]) + DistanceMatrix[intermediate][destination];
distancematrix[source][destination] = distancematrix[source][intermediate]
+ distancematrix[intermediate][destination];
} }
} }
} }
for (int source = 1; source <= numberofvertices; source++) for (int source = 1; source <= numberofvertices; source++)
System.out.print("\t" + source); System.out.print("\t" + source);
System.out.println(); System.out.println();
for (int source = 1; source <= numberofvertices; source++) for (int source = 1; source <= numberofvertices; source++)
{ {
System.out.print(source + "\t"); System.out.print(source + "\t");
for (int destination = 1; destination <= numberofvertices; destination++) for (int destination = 1; destination <= numberofvertices; destination++)
{ {
System.out.print(DistanceMatrix[source][destination] + "\t");
System.out.print(distancematrix[source][destination] + "\t");
} }
System.out.println(); System.out.println();
} }
} }
public static void main(String... arg) public static void main(String... arg)
{ {
int Adjacency_Matrix[][];
int adjacency_matrix[][];
int numberofvertices; int numberofvertices;
Scanner scan = new Scanner(System.in); Scanner scan = new Scanner(System.in);
System.out.println("Enter the number of vertices"); System.out.println("Enter the number of vertices");
numberofvertices = scan.nextInt(); numberofvertices = scan.nextInt();
Adjacency_Matrix = new int[numberofvertices + 1][numberofvertices + 1];
adjacency_matrix = new int[numberofvertices + 1][numberofvertices + 1];
System.out.println("Enter the Weighted Matrix for the graph"); System.out.println("Enter the Weighted Matrix for the graph");
for (int source = 1; source <= numberofvertices; source++) for (int source = 1; source <= numberofvertices; source++)
{ {
for (int destination = 1; destination <= numberofvertices; destination++) for (int destination = 1; destination <= numberofvertices; destination++)
{ {
Adjacency_Matrix[source][destination] = scan.nextInt();
adjacency_matrix[source][destination] = scan.nextInt();
if (source == destination) if (source == destination)
{ {
Adjacency_Matrix[source][destination] = 0;
adjacency_matrix[source][destination] = 0;
continue; continue;
} }
if (Adjacency_Matrix[source][destination] == 0)
if (adjacency_matrix[source][destination] == 0)
{ {
Adjacency_Matrix[source][destination] = INFINITY;
adjacency_matrix[source][destination] = INFINITY;
} }
} }
} }
System.out.println("The Transitive Closure of the Graph"); System.out.println("The Transitive Closure of the Graph");
FloydWarshall floydwarshall = new FloydWarshall(numberofvertices); FloydWarshall floydwarshall = new FloydWarshall(numberofvertices);
floydwarshall.floydwarshall(adjacency_matrix); floydwarshall.floydwarshall(adjacency_matrix);
scan.close(); scan.close();
} }
} }