Saturday, September 3, 2011

Minimum cost spanning tree using Prim's algorithm


/* Program for constructing a minimum cost spanning tree using Prim's algorithm */

#define infinity 9999
#define MAX 20
#include<stdio.h>
#include<stdlib.h>
int G[MAX][MAX],n;
void prims();
int main()
{
int i,j,op;
do {
   printf("\n\n1)Create\n2)Prim's\n3)Quit");
   printf("\nEnter Your Choice : ");
   scanf("%d",&op);
   switch(op)
    { case 1:
     printf("\nEnter No. of vertices : ");
     scanf("%d",&n);
     printf("\nEnter the adjacency matrix :");
     for(i=0;i<n;i++)
for(j=0;j<n;j++)
 scanf("%d",&G[i][j]);
      break;
case 2: prims();break;

     }
}while(op!=3);
}
void prims()
{
int cost[MAX][MAX];
int u,v,min_distance,distance[MAX],from[MAX];
int visited[MAX],no_of_edges,i,min_cost,j;
// create cost[][] matrix ,spanning[][]
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(G[i][j]==0)
cost[i][j]=infinity;
else
cost[i][j]=G[i][j];

}
// initialise visited[],distance[] and from[]
distance[0]=0;visited[0]=1;
for(i=1;i<n;i++)
{
distance[i]=cost[0][i];
from[i]=0;
visited[i]=0;
}
min_cost=0;            //cost of spanning tree
no_of_edges=n-1;       //no.of edges to be added
while(no_of_edges>0)
{
//find the vertex at minimum distance from the tree
min_distance=infinity;
for(i=1;i<n;i++)
if(visited[i]==0 && distance[i] < min_distance)
{
v=i;
min_distance=distance[i];
}
u=from[v];
printf("\nNext edge in spanning tree is:(%d,%d,%d)",u,v,distance[v]);
no_of_edges--;
visited[v]=1;
// update the distance[] array
for(i=1;i<n;i++)
if(visited[i]==0 && cost[i][v] < distance[i])
{
distance[i]=cost[i][v];
from[i]=v;
}
min_cost=min_cost+cost[u][v];
}

printf("\nTotal cost of spanning tree=%d",min_cost);
}

1 comment:

  1. J-BET | Casino & Spa | Miami, FL
    J-BET offers 태백 출장마사지 guests an outstanding casino experience, as well as the chance 전라북도 출장안마 to win a virtual cash prize 전라북도 출장마사지 as 경상북도 출장샵 part of a massive 경기도 출장안마 casino renovation and expansion.

    ReplyDelete