Dijkshtra's Algorithm

This commit is contained in:
Mayank Kumar Jha
2017-04-24 19:24:24 +05:30
committed by GitHub
parent 8426d22e81
commit 9d2374ffbe

View File

@@ -1,20 +1,28 @@
public static void main(String[] args) throws IOException {
Reader in=new Reader();
int t1=in.nextInt();
for(int gj=0;gj<t1;gj++)
{
int n=in.nextInt();
int m=in.nextInt();
long w[][]=new long [n+1][n+1];
for (long[] row: w)
int n=in.nextInt(); //n = Number of nodes or vertices
int m=in.nextInt(); //m = Number of Edges
long w[][]=new long [n+1][n+1]; //Adjacency Matrix
//Initializing Matrix with Certain Maximum Value for path b/w any two vertices
for (long[] row: w)
Arrays.fill(row, 1000000l);
//From above,we Have assumed that,initially path b/w any two Pair of vertices is Infinite such that Infinite = 1000000l
//For simplicity , We can also take path Value = Long.MAX_VALUE , but i have taken Max Value = 1000000l .
//Taking Input as Edge Location b/w a pair of vertices
for(int i=0;i<m;i++){
int x=in.nextInt(),y=in.nextInt();
long cmp=in.nextLong();
if(w[x][y]>cmp){
w[x][y]=cmp; w[y][x]=cmp;
if(w[x][y]>cmp){ //Comparing previous edge value with current value - Cycle Case
w[x][y]=cmp; w[y][x]=cmp;
}
}
//Implementing Dijkshtra's Algorithm
Stack <Integer> t=new Stack<Integer>();
int src=in.nextInt();
for(int i=1;i<=n;i++){
@@ -30,9 +38,11 @@ public static void main(String[] args) throws IOException {
min=(int) w[src][t.elementAt(i)];loc=i;}
}
p.push(t.elementAt(loc));t.removeElementAt(loc);}
//Printing shortest path from the given source src
for(int i=1;i<=n;i++){
if(i!=src && w[src][i]!=1000000l){System.out.print(w[src][i]+" ");}
else if(i!=src){System.out.print("-1"+" ");}
}System.out.println();
else if(i!=src){System.out.print("-1"+" ");} //Printing -1 if there is no path b/w given pair of edges
}
}