#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;
}
}
#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