Wednesday, 7 October 2015

shortest path

#include<stdio.h>
#include<conio.h>
#define MAX 1000



void dijkstra(int n,int v,int cost[10][10],int dist[10]);

int main()
{
 int n,v,i,j,cost[10][10],dist[10];
 clrscr();
 printf("\n Enter the number of Nodes: ");
 scanf("%d",&n);
 printf("\n Enter the Weight Matrix:\n");
 printf("\nEnter 1000 to denote Infinity\n");
 for(i=0;i<n;i++)
 {
   for(j=0;j<n;j++)
   {
     scanf("%d",&cost[i][j]);
   }
 }
 printf("\n Enter the Source Node:");
 scanf("%d",&v);
 dijkstra(n,v-1,cost,dist);
 printf("\n   Shortest Path from Node : %d",v);
 printf("\n#################################\n\n");
 for(i=0;i<n;i++)
 {
    printf("Distance to Node: %d is %d\n",i+1,dist[i]);
 }
 return 0;
}

void dijkstra(int n,int v,int cost[10][10],int dist[10])
{
  int i,u,count,w,flag[10],min;

  for(i=0;i<n;i++)
  {
    flag[i]=0;
    dist[i]=cost[v][i];
  }
  count=1;
  while(count<n)
  {
    min=MAX;
    for(w=0;w<n;w++)
    {
       if(dist[w]<min && !flag[w])
       {
    min=dist[w];
    u=w;
       }
    }
    flag[u]=1;
    count++;
    for(w=0;w<n;w++)
    {
       if((dist[u]+cost[u][w]<dist[w])&&!flag[w])
       {
   dist[w]=dist[u]+cost[u][w];
       }
    }
 }

}

No comments:

Post a Comment