Friday, June 30, 2023

DSA-II 5: Graph Applications – I

 Assignment 5: Graph Applications – I

Set A

a) Write a C program for the implementation of Topological sorting.

//C program to Obtain the topological ordering of vertices in a given digraph

#include<stdio.h>

#include<conio.h>

#include<dos.h>

#include<time.h>

int a[10][10],n,indegree[10];

void find_indegree()

{

 int i,j,sum;

 for(j=0;j<n;j++)

 {

  sum=0;

  for(i=0;i<n;i++)

   sum+=a[i][j];

 indegree[j]=sum;

 }

}

void topology()

{

 int i,u,v,t[10],s[10],top=-1,k=0;

 delay(1000);

 find_indegree();

 for(i=0;i<n;i++)

 {

  if(indegree[i]==0)s[++top]=i;

 }

 while(top!=-1)

 {

  u=s[top--];

  t[k++]=u;

  for(v=0;v<n;v++)

  {

   if(a[u][v]==1)

   {

    indegree[v]--;

    if(indegree[v]==0)s[++top]=v;

   }

  }

 }

 printf("The topological sequence is:");

 for(i=0;i<n;i++)

 printf("\t%d",t[i]+1);

}

void main()

{

 int i,j;

 clrscr();

 printf("Enter the no ofjobs: ");

 scanf("%d",&n);

 printf("Enter the adjacency matrix:");

 for(i=0;i<n;i++)

 {

  for(j=0;j<n;j++)

  scanf("%d",&a[i][j]);

 }

 topology();

 getch();

}

b) Write a C program for the Implementation of Prim’s Minimum spanning tree algorithm.

//Prims algorithm

#include<stdio.h>

int a,b,u,v,n,i,j,ne=1;

int visited[10]={0},min,mincost=0,cost[10][10];

void main()

{

printf("\nEnter the number of nodes:");

scanf("%d",&n);

printf("\nEnter the 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;

}

}

visited[1]=1;

printf("\n");

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)

      {

min=cost[i][j];

a=u=i;

b=v=j;

      }

      if(visited[u]==0 || visited[v]==0)

      {

printf("\n Edge %d:(%d %d) cost:%d",ne++,a,b,min);

mincost+=min;

visited[b]=1;

      }

      cost[a][b]=cost[b][a]=999;

    }

  }

}

}

printf("\n Minimun cost=%d\n\n",mincost);

}


Set B

a) Write a C program for the Implementation of Kruskal’s Minimum spanning tree algorithm

//Kruskal's algorithm

#include<stdio.h>

#include<stdlib.h>

int i,j,k,a,b,u,v,n,ne=1;

int min,mincost=0,cost[9][9],parent[9];

int find(int);

int uni(int,int);

void main()

{

printf("\n\tImplementation of Kruskal's algorithm\n");

printf("\nEnter the no. of vertices:");

scanf("%d",&n);

printf("\nEnter 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;

}

}

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(uni(u,v))

{

printf("%d edge (%d,%d) =%d\n",ne++,a,b,min);

mincost +=min;

}

cost[a][b]=cost[b][a]=999;

}

printf("\n\tMinimum cost = %d\n",mincost);

}

int find(int i)

{

while(parent[i])

i=parent[i];

return i;

}

int uni(int i,int j)

{

if(i!=j)

{

parent[j]=i;

return 1;

}

return 0;

}

No comments:

Post a Comment