Prim's Algorithm

Program In C:-
                           // Prim's Algorithm
#include<stdio.h>
#include<stdlib.h>
#define infinity 9999
#define MAX 20
int G[MAX][MAX],spanning[MAX][MAX],n;
int prims();
int main()
{
    int i,j,total_cost;
    printf("nter number of vertices:");
    scanf("%d",&n);
    printf("\nenter the adjacency matrix:\n");
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            scanf("%d",&G[i][j]);
    total_cost=prims();
    printf("\nspanning tree matrix:\n");

    for(i=0;i<n;i++)
    {
        printf("\n");
        for(j=0;j<n;j++)
            printf("%d\t",spanning[i][j]);
    }
    printf("\n\notal cost of spanning tree is=%d",total_cost);
    return 0;
}
int 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];
                spanning[i][j]=0;
        }
    //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];
        //insert the edge in spanning tree
        spanning[u][v]=distance[v];
        spanning[v][u]=distance[v];
        no_of_edges--;
        visited[v]=1;
        //updated 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];
    }
    return(min_cost);
}
/*
enter number of vertices:4

enter the adjacency matrix:
0 1 2 3
4 5 6 7
8 9 4 6
7 4 5 6

spanning tree matrix:

0       1       2       3
1       0       0       0
2       0       0       0
3       0       0       0
total cost of spanning tree is=6
Process returned 0 (0x0)   execution time : 20.585 s

Press any key to continue.*/

Comments