import java.io.*;
class Tnode
{
int prev;
int len;
char label;
boolean vis;
public Tnode(char lab)
{
label = lab;
prev=-1;
len=100000;
vis=false;
}
}
class graph
{
public final int MAX = 20;
public int nverts,i,min;
public Tnode vlist[];
public int adj[][];
public graph()
{
nverts = 0;
adj = new int[MAX][MAX];
vlist = new Tnode[MAX];
for(int i=0;i<MAX;i++)
{
for(int j=0;j<MAX;j++)
adj[i][j] = 0;
}
}
public void addver(char lab)
{
vlist[nverts++] = new Tnode(lab);
}
public void addedge(int start,int end,int cost)
{
adj[start][end] = cost;
}
public int getind(char l)
{
for(int i=0;i<nverts;i++)
if(vlist[i].label==l)
return i;
return (MAX+1);
}
public void brfs(int src)
{
int k,cnt=0;
int path[]=new int[20];
vlist[src].len=0;
vlist[src].vis=true;
k=src;
do{
cnt++;
for(i=0;i<nverts;i++)
{
if((adj[k][i]!=0)&&(vlist[i].vis==false))
{
if(vlist[k].len+adj[k][i]<vlist[i].len)
{
vlist[i].prev=k;
vlist[i].len=vlist[k].len+adj[k][i];
}
}
}
k=0;
min=100000;
for(i=0;i<nverts;i++)
{
if((vlist[i].vis==false)&&(vlist[i].len<min))
{
min=vlist[i].len;
k=i;
}
}
vlist[k].vis=true;
}while(cnt<nverts);
System.out.println("shortest path from source to Other Nodes is \n");
for(int l=0;l<nverts;l++)
{
i=0;
k=l;
int c=0;
do{
path[i++]=k;
c++;
k=vlist[k].prev;
}while(k>=0);
System.out.println("shortest path from " +vlist[src].label+" to " +vlist[l].label);
for(i=c-1;i>=0;i--)
System.out.print("-->"+vlist[path[i]].label);
System.out.println("\n shortest distance from " +vlist[src].label+" to " +vlist[l].label+" \t\t"+vlist[l].len);
}
}
}
class Dijra
{
public static void main(String args[])throws IOException
{
graph gr = new graph();
char c;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.println("Enter the number of vertices");
int n = Integer.parseInt(br.readLine());
String t;
System.out.println("Enter the labels for the vertices");
for(int i=0;i<n;i++)
{
t = br.readLine();
c = t.charAt(0);
gr.addver(c);
}
System.out.println("Enter the number of edges");
int edg = Integer.parseInt(br.readLine());
System.out.println("Enter the vertices which you need to connect");
for(int j=0;j<edg;j++)
{
System.out.println("Enter the first vertex");
t = br.readLine();
c = t.charAt(0);
int start = gr.getind(c);
System.out.println("Enter the second vertex");
t = br.readLine();
c = t.charAt(0);
int end = gr.getind(c);
System.out.println("Enter the cost");
int cost = Integer.parseInt(br.readLine());
gr.addedge(start,end, cost);
}
System.out.println("Enter the source vertex");
t = br.readLine();
c = t.charAt(0);
int src = gr.getind(c);
gr.brfs(src);
}
}
No comments:
Post a Comment