Program 1
#include<stdio.h>
int find(int i);
void uni (int i,int j);
int parent[10]={0};
void main()
{
int i,j,n,cost[20][20],a,b,u,v,min,mincost=0,ne=1;
printf("Enter the number of nodes:");
scanf("%d",&n);
printf("Enter the cost of adjacency matrix:\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&cost[i][j]);
if(cost[i][j]==0)
cost[i][j]=999;
}
}
printf("The edges of minimum cost spanning tree are\n");
while(ne<n)
{
for(i=1,min=999;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(cost[i][j]<min)
{
min=cost[i][j];
a=u=i;
b=v=j;
}
}
}
u=find(u);
v=find(v);
if(u!=v)
{
uni(u,v);
printf("%d Edge (%d,%d)=%d\n",ne++,a,b,min);
mincost=mincost+min;
}
cost[a][b]=cost[b][a]=999;
}
printf("minimum cost : %d \n",mincost);
}
int find(int i)
{
while(parent[i])
i=parent[i];
return i;
}
void uni(int i, int j)
{
parent[j]=i;
}
____________________________________________________________________________________________________
Program 2
#include<stdio.h>
void main()
{
int i,j,n,cost[20][20],u,v,min,mincost=0,visited[10],ne=1;
printf("Enter the number of nodes:");
scanf("%d",&n);
printf("Enter the cost adjacency matrix:\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&cost[i][j]);
if(cost[i][j]==0)
cost[i][j]=999;
}
}
for(i=1;i<=n;i++)
visited[i]=0;
printf("\n the edges considered for MST are \n");
visited[1]=1;
while(ne<n)
{
for(i=1,min=999;i<=n;i++)
for(j=1;j<=n;j++)
if(cost[i][j]<min)
{
if(visited[i]==0)
continue;
else
{
min=cost[i][j];
u=i;
v=j;
}
}
if(visited[u]==0||visited[v]==0)
{
printf("%d Edge (%d,%d)=%d\n",ne++,u,v,min);
mincost=mincost+min;
visited[v]=1;
}
cost[u][v]=cost[v][u]=999;
}
printf("\n Minimum cost=%d\n",mincost);
}