You are on page 1of 2

#include

#include
int b[10][10],a[10][10],v,v1,v2,n,e,visited[10],edge,cost,i,j;
void initialize()
{
printf("\nEnter the number of nodes\n");
scanf("%d",&n);
printf("\Enter the number of edges\n");
scanf("%d",&e);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
for(i=1;i<=n;i++)
visited[i]=0;
for(i=1;i<=e;i++)
{
printf("\nEnter the two vertices v1 & v2 \n");
scanf("%d%d",&v1,&v2);
printf("\nEnter the corresponding cost\n");
scanf("%d",&edge);
a[v1][v2]=edge;
}
}
int prim()
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j)
b[i][j]=0;
else
b[i][j]=999;
for(i=1;i<=n-1;i++)
{
findmin(&v1,&v2);
edge=a[v1][v2];
b[v1][v2]=b[v2][v1]=edge;
visited[v1]=visited[v2]=1;
cost=cost+edge;
}
return cost;
}
int findmin(int *v1,int *v2)
{
int edge=0,i;
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if((visited[i]==1&&visited[j]!=1)||(visited[i]!=1&&visited[j]==1))
{
if((edge>a[i][j]||edge==0)&&a[i][j]>0)

{
edge=a[i][j];
*v1=i;
*v2=j;
}
}
}
}
return;
}
void main()
{
int val;
clrscr();
initialize();
val=prim();
printf("\nThe cost is %d\n",val);
printf("\nThe matrix is\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d\t",b[i][j]);
}
printf("\n");
}
getch();
}

You might also like