Sunday, October 27, 2013

Dijkstra's/Shortest Path Algorithm in C

#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define sz 20
void create(int A[sz][sz],int v);
void dijkstra(int cost[sz][sz],int v,int st);
void main()
 {
  int ch,v,st,i,j;
  int A[sz][sz];
  do
{
clrscr();
printf("\n\t$----------GRAPH------------$");
printf("\n\t|      1. CREATE            |");
printf("\n\t|      2. SHORTEST PATH     |");
printf("\n\t|      3. EXIT              |");
printf("\n\t$---------------------------$");
printf("\n\tEnter Choice : ");
scanf("%d",&ch);
switch(ch)
  {
  case 1:
 printf("\nEnter No. of Vertices : ");
 scanf("%d",&v);
 create(A,v);
 for(i=0;i<v;i++)
{
printf("\n");
for(j=0;j<v;j++)
  printf(" %d ",A[i][j]);
}
 break;
  case 2:
 printf("\n\tEnter starting starting vertex : ");
 scanf("%d",&st);
 dijkstra(A,v,st);
 break;
  case 3:
 exit(0);
 break;

  }
  getch();
}while(ch!=3);
 }
void dijkstra(int cost[sz][sz],int v,int st)
  {
   int i,j,totv,visited[sz],dist[sz],pred[sz],u,min;
   for(i=0;i<v;i++)
{
visited[i]=0;
dist[i]=32767;
pred[i]=0;
}
   totv=1;
   visited[st]=1;
   for(i=0;i<v;i++)
{
 if(cost[st][i]!=32767&&visited[i]==0)
{
  dist[i]=cost[st][i];
  pred[i]=st;
}
}

   while(totv<v)
{
 min=32767;
 for(i=0;i<v;i++)
{
if(dist[i]<min&&visited[i]==0)
  {
min=dist[i];
u=i;
  }
}
 totv++;
 visited[u]=1;
 for(i=0;i<v;i++)
{
if(visited[i]==0&&cost[u][i]!=32767)
  {
if(dist[i]>(cost[u][i]+dist[u]))
{
  dist[i]=cost[u][i]+dist[u];
  pred[i]=u;
}

  }

}


}

for(i=0;i<v;i++)
 {
  if(i!=st&&dist[i]!=32767)
{
  printf("\n DIST of (%d->%d) : %d  ",st,i,dist[i]);
  printf("PATH : ");
  j=i;
  do
{
if(j==pred[j])
  break;
printf(" %d <-",j);
j=pred[j];

}while(j!=st);
  if(j!=pred[j])
printf(" %d",st);
}

 }



  }
void create (int A[sz][sz],int v)
  {
   int i,j,x,y;
   for(i=0;i<v;i++)
for(j=0;j<v;j++)
  A[i][j]=32767;

   for(i=0;i<v;i++)
{
 printf("\nEnter An EDGE (x->y) : ");
 scanf("%d",&x);
 if(x==-1)
break;
 scanf("%d",&y);
 if(x==-1)
break;
  printf("\nEnter Weight : ");
  scanf("%d",&j);
 A[x][y]=j;

}

  }

No comments:

Post a Comment

Perform a suitable assignment using Xen Hypervisor or equivalent open source to configure it. Give necessary GUI.

 To install kvm on Fedora:  yum install kvm  yum install virt-manager libvirt libvirt-python python-virtinst  su -c "yum install @v...