Sei sulla pagina 1di 2

Dij.

java
import java.util.*;
class Graph
{
int g[][];
int v,e;
int visited[],d[],p[];
void creategraph()
{
int a,b,w;
Scanner kbd=new Scanner(System.in);
System.out.print("Enter No. Of Vertices");
v=kbd.nextInt();
System.out.print("Enter No. Of Edges");
e=kbd.nextInt();
//create matrix of v+1 rows & v+1 cols
g=new int[v+1][v+1];
//initialize entire matrix g to zero
for (int i=1;i<=v;i++)
for (int j=1;j<=v;j++)
g[i][j]=0;
//store edge information
for (int i=1;i<=e;i++)
{
System.out.println("Enter Edge Information");
a=kbd.nextInt();
b=kbd.nextInt();
System.out.println("Enter Weight Of This Edge");
w=kbd.nextInt();
g[a][b]=g[b][a]=w;
}
}//end creategraph
void calldij()
{
visited=new int[v+1];
d=new int[v+1];
p=new int[v+1];
//initialize p & visited to zero
for(int i=1;i<=v;i++)
p[i]=visited[i]=0;
//initialize d array to infinity
for(int i=1;i<=v;i++)
d[i]=32767;
//now call dijikstra function
dij();
}
void dij()
{
int c,current,mincost=0,source,dest;
System.out.println("Enter Source & Destination Vertex");
Scanner kbd=new Scanner(System.in);
source=kbd.nextInt();
dest=kbd.nextInt();
current=source;
visited[current]=1;
d[current]=0;
while(current !=dest)
{
//process vertex k
int dc=d[current];
for(int i=1;i<=v;i++)
{
if(g[current][i]!=0 && visited[i] !=1)
if(g[current][i]+dc<d[i])
Page 1
Dij.java
{
d[i]=g[current][i]+dc;
p[i]=current;
}
}//end for
//now look for vertex at shortest distance
int min=32767;
for(int i=1;i<=v;i++)
{
if(visited[i]!=1 && d[i]<min)
{
min=d[i];
current=i;
}
}
//mark vertex current as visited
visited[current]=1;
}//end while
//find out shortest distance
System.out.println("Shortest Distance = "+d[dest]);
}//end dij
}//end Graph class
public class Dij
{
public static void main(String args[])
{
Graph g=new Graph();
g.creategraph();
g.calldij();
}
}

Page 2

Potrebbero piacerti anche