You are on page 1of 2

#include<stdio.

h>
#include<stdlib.h>
#define INFINITY 999
void dijkstra(int n,int cost[100][100],int visited[100],int p[100],int distance
[100],int source)
{
int i,u,mincost,j,v,x;
for(i=0;i<n;i++)
{
distance[i]=cost[source][i];
p[i]=source;
visited[i]=0;
}
visited[source]=1;
//
printf("\nDestination=%d",dest);
for(i=0;i<n;i++)
{
mincost=INFINITY;
for(j=0;j<n;j++)
if((visited[j]==0 ) && (distance[j]<mincost))
{
mincost=distance[j];
u=j;
printf("\nCOntrol\n");
}
printf("\nmincost=%d,u=%d,i=%d\n",mincost,u,i);
visited[u]=1;
for(v=0;v<n;v++)
if((visited[v]==0) && (distance[u]+cost[u][v]<distance[v]))
{
distance[v]=cost[u][v]+distance[u];
p[v]=u;
}
printf("\n\n\n");
for(x=0;x<n;x++)
printf("%d ",distance[x]);
printf("\n\n\n");
for(x=0;x<n;x++)
printf("p[%d]=%d ",x,p[x]);
}
}
int main()
{
int n,a[100][100],visited[100],p[100],distance[100],source,dest,i,j;
printf("\nEnter the no.of.vertices in the graph: ");
scanf("%d",&n);
printf("\nEnter the adjacency martrix,999 for no edge\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("\nEnter the source node: ");
scanf("%d",&source);
dijkstra(n,a,visited,p,distance,source);
for(dest=0;dest<n;dest++)

{
if(distance[dest]==INFINITY)
printf("\nNode %d is not reachable from node %d",dest,source);
else
{
printf("\npath from %d to %d is",dest,source);
i=dest;
while(i!=source)
{
printf("%d<-",i);
i=p[i];
}
printf("%d",i);
printf("\ndistance=%d",distance[dest]);
}
}
}

You might also like