Thursday, 10 September 2015

shortest path in given graph

dijkstra


  1. #include<stdio.h>
  2. #include<conio.h>
  3. #define MAX 1000



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

  5. int main()
  6. {
  7.  int n,v,i,j,cost[10][10],dist[10];
  8.  clrscr();
  9.  printf("\n Enter the number of Nodes: ");
  10.  scanf("%d",&n);
  11.  printf("\n Enter the Weight Matrix:\n");
  12.  printf("\nEnter 1000 to denote Infinity\n");
  13.  for(i=0;i<n;i++)
  14.  {
  15.    for(j=0;j<n;j++)
  16.    {
  17.      scanf("%d",&cost[i][j]);
  18.    }
  19.  }
  20.  printf("\n Enter the Source Node:");
  21.  scanf("%d",&v);
  22.  dijkstra(n,v-1,cost,dist);
  23.  printf("\n   Shortest Path from Node : %d",v);
  24.  printf("\n#################################\n\n");
  25.  for(i=0;i<n;i++)
  26.  {
  27.     printf("Distance to Node: %d is %d\n",i+1,dist[i]);
  28.  }
  29.  return 0;
  30. }

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

  34.   for(i=0;i<n;i++)
  35.   {
  36.     flag[i]=0;
  37.     dist[i]=cost[v][i];
  38.   }
  39.   count=1;
  40.   while(count<n)
  41.   {
  42.     min=MAX;
  43.     for(w=0;w<n;w++)
  44.     {
  45.        if(dist[w]<min && !flag[w])
  46.        {
  47.    min=dist[w];
  48.    u=w;
  49.        }
  50.     }
  51.     flag[u]=1;
  52.     count++;
  53.     for(w=0;w<n;w++)
  54.     {
  55.        if((dist[u]+cost[u][w]<dist[w])&&!flag[w])
  56.        {
  57.   dist[w]=dist[u]+cost[u][w];
  58.        }
  59.     }
  60.  }

  61. }

No comments:

Post a Comment