×

Spanning Tree

Spanning Tree: The spanning tree is a subset of the graph. It is a non-cyclic graph. If any node in the spanning tree is truncated, the entire graph fails.

There are several ways to create a spanning tree from a graph. Three types of spanning trees have been created from a graph, which has all the vertices and some edges in the graph. Ensure that no spreading trees form a circle.

Properties of the spanning tree

  1. The connected graph may contain more than one spanning tree.
  2. There is no cycle in the spanning tree.
  3. If any node in the spanning tree is truncated, the entire graph fails.
  4. If you add an edge to the spanning tree, it creates a loop or circuit.

Cost of a spanning tree

The cost of a spanning tree can be calculated by adding the weights of its vertices.

Minimum spanning tree

The minimum spanning tree is that spanning-tree, which costs the lowest.There are two types of algorithms for finding the minimum spanning tree.

  1. Prim's algorithm
  2. Kruskal's algorithm

Prim’s algorithm

Prim’s algorithm is based on the greedy algorithm. It is used to find a minimum spanning tree in the graph. This algorithm treats a single tree as a node, and adds a new node to it to create a spanning tree from the given graph.

Algorithm

Step 1. Select a starting vertex. 
Step 2. Repeat Steps 3 and 4 until there are fringe vertices. 
Step 3. Select an edge e connecting the tree vertex and fringe vertex that has minimum weight. 
Step 4. Add the selected edge and the vertex to the minimum spanning tree T. 
Step 5. Exit.  

Example of prim’s algorithm

Construct the MST for the given graph in the following figure using Prime's algorithm.

 Spanning Tree

Step 1: Choose a vertex             S = {a}             V/S = {b, c, d, e, f, g}             

 Spanning Tree

  Step 2: Choose the shortest edge from this vertex, and add it.             S = {a}             V/S = {b, c, d, e, f, g}             Lowest edge = {ab}         

 Spanning Tree

Step 3: Choose the shortest edge from the b vertex and add it.             S = {a, b}             V/S = {c, d, e, f, g}             Lowest edge = {bd}     

 Spanning Tree

Step 4: Choose the shortest edge from the d vertex and add it.             S = {a, b, d}             V/S = {c, e, f, g}             Lowest edge = {dc}       

 Spanning Tree

Step 5: Choose the shortest edge from the c vertex and add it.             S = {a, b, d, c}             V/S = {e, f, g}             Lowest edge = {cf}  

 Spanning Tree

Step 6: Choose the shortest edge from the f vertex and add it.             S = {a, b, d, c, f}             V/S = {e, g}             Lowest edge = {fg}  

 Spanning Tree

Step 7: Choose the shortest edge from the g vertex and add it.             S = {a, b, d, c, f, g}             V/S = {e}             Lowest edge = {ge}  

 Spanning Tree

  MST is complete MST cost = 5 + 8 + 2 + 1 + 2 + 4                  = 22  

Prim’s algorithm program in C language

#include <stdio.h>
  #include <conio.h>
   #include <limits.h>
   #define vertices 5  
    int minimum_key(int k[], int mst[]) 
  {      
int minimum  = INT_MAX, min,i; 
         for (i = 0; i < vertices; i++)  
      if (mst[i] == 0 && k[i] < minimum )
            minimum  = k[i], min = i;          return min; 
 }        
  void prim(int g[vertices][vertices])  
 {       
 int parent[vertices];    
     int k[vertices];   
        int mst[vertices];    
      int i, count,u,v;   
      for (i = 0; i < vertices; i++)  
         k[i] = INT_MAX, mst[i] = 0;    
        k[0] = 0;         
    parent[0] = -1;       
      for (count = 0; count < vertices-1; count++)    
    {           
      u = minimum_key(k, mst);  
         mst[u] = 1;      
     for (v = 0; v < vertices; v++)  
             if (g[u][v] && mst[v] == 0 && g[u][v] <  k[v])  
              parent[v]  = u, k[v] = g[u][v]; 
       }    
      for (i = 1; i < vertices; i++)  
       printf("%d  %d    %d \n", parent[i], i, g[i][parent[i]]); 
  }      
     void main()   
{    
  int g[vertices][vertices] = {                      {3, 2, 1, 9, 0}, {5, 1, 2, 10, 4}, {0, 4, 1, 0, 9}, {8, 10, 0, 2, 10}, {1, 6, 8, 11, 0}                                                 };  
         prim(g);   }    

Output:

0  1    5
0  2    0
0  3    8
1  4    6  

Kruskal’s algorithm

Kruskal’s algorithm is also based on the greedy algorithm. Kruskal’s algorithm is used to find a minimum spanning tree in a graph. It follows all properties of the minimum spanning tree. In this algorithm, a graph is treated as a forest and all nodes are treated as an individual tree.

To find the minimum spanning tree with the help of Kruskal algorithm, firstly we choose a lowest cost edge in the graph. After that, again, we choose the second lowest cost edge, and the process continues until all the vertices have been added.

Algorithm

MST_Kruskal’s(G, v) 
Step 1: for each vartex V in graph G do 
Step 2: create a set (actually tree) with element v 
Step 3: Initialize a pririty queue ‘Q’ containing all edges in descending order of their weight 
Step 4: Forest ? A        //contain all edges of the MST 
Step 5: while Tree (T) has edges <= N-1 do    // N is no of vertices 
Step 6: Select edge with minimum weight 
Step 7: if T(v) ? T(u) then             add (u, v) to forest             union T(v) and T(u) 
Step 8: return   

Example of Kruskal’s algorithm

Construct the MST for the given graph in the following figure using Kruskal’s algorithm.

Solution:

Edgeab  df  ce  ac  bd  bc  ef  de
Weight  1  2  3  4  6  8  10  15

Step 1:

Step 2:

Step 3:

Step 4:

Step 5:

MST is complete

Kruskal’s algorithm program in C language

#include <iostream>
#include <vector> 
#include <utility> 
#include <algorithm> 
  using namespace std;  
 const int MAX = 1e4 + 5;  
 int id[MAX], nodes, edges; 
  pair <long long, pair<int, int> > p[MAX];   
    void init() 
  {     
  for(int i = 0;i < MAX;++i)          
 id[i] = i;  
 }      
 int root(int x) 
  {    
   while(id[x] != x)  
     {      
     id[x] = id[id[x]];    
       x = id[x];      
 }     
  return x;  
 }     
  void union1(int x, int y) 
  {     
  int p = root(x);
       int q = root(y);       id[p] = id[q];   
}       long long kruskal(pair<long long, pair<int, int> > p[]) 
  {   
    int x, y;     
  long long cost, minimumCost = 0;       for(int i = 0;i < edges;++i) 
      {       
    x = p[i].second.first;    
       y = p[i].second.second;   
        cost = p[i].first;  
         if(root(x) != root(y))    
       {       
        minimumCost += cost;     
          union1(x, y);      
     }    
       }   
    return minimumCost; 
  }      
 int main()  
 {    
   int x, y;   
    long long weight, cost, minimumCost;  
     init();       cout <<"Enter Nodes and edges";    
   cin >> nodes >> edges;     
  for(int i = 0;i < edges;++i)   
    {     
      cout<<"Enter the value of X, Y and edges";  
     cin >> x >> y >> weight;   
        p[i] = make_pair(weight, make_pair(x, y)); 
      }     
  sort(p, p + edges);    
   minimumCost = kruskal(p);  
     cout <<"Minimum cost is "<< minimumCost << endl;       return 0;   }  

Related Topics

Hashing and its Applications

Hashing Hashing refers to transforming plain text data in such a way that even if it is leaked for some reason, no one would be able to make sense of it....

6 minutes read.

Bottom view of the binary tree

The bottom of the binary tree is generally defined as the number of nods present in the bottom-most part of the tree. In this article, we will see the implementation...

3 minutes read.

Detect and Remove Loop in a Linked List

Create a function called detectAndRemovetheLoop() that verifies whether a given Linked List has a loop, eliminates the loop if it does, and returns true if it does. It returns false...

6 minutes read.

Application of Stack in Data Structures

In this article, we will discuss all the different applications of stack. What is meant by stack? The stack is a non-primitive linear data structure in which the insertion of the new...

11 minutes read.

Reverse the Singly Linked List in C

Reverse the Singly Linked List in C This article has given a singly linked list and will reverse the linked list by changing the links between nodes. Example:                         Input:  2 -> 4...

3 minutes read.

Digital Search Tree in Data Structures

What is a digital search Tree in Data Structures? The Digital search tree is known for its application and diversity in the way it has impacted our world in the field...

3 minutes read.

Extended Binary Tree

An extended binary tree is a binary tree in which all the NILL subtrees present mainly in the original trees are exchanged with the special nodes that are primarily known...

3 minutes read.

Tim Sort

Tim Sort is a mixture stable arranging calculation that exploits normal examples in information, and uses a mix of an improved Merge sort and Binary Insertion sort alongside an interior...

6 minutes read.

Convert a Binary Tree into a Binary Search Tree

Implementation #include <stdio.h>   #include <stdlib.h>       //creating a node of the binary tree.  struct __nod{       int record;       struct __nod *Lft;       struct __nod *Rt;   };       // presenting the root of the binary tree.   struct...

5 minutes read.

Stack Using Array

Stack – A Stack is a linear abstract data type used to store elements. It is also called last in first out or first in last out data structure because...

6 minutes read.

DFS (Depth-first search) Algorithm: Data Structure

What is DFS (Depth-first search)? The depth first search is a graph traversal algorithm. The idea behind this algorithm is backtracking and it is a kind of recursive algorithm. In the...

3 minutes read.

Collision Resolution Techniques

Collision Resolution Techniques Collision in hashing In this, the hash function is used to compute the index of the array.The hash value is used to store the key in the hash table,...

2 minutes read.

Heap Sort in Data Structure

Heap Sort A heap is a tree-based data structure that has specific properties. Heap is always a complete binary tree (CBT). That is, all the nodes of the tree are completely filled.If...

6 minutes read.

Strings in Data Structures

Strings and functions in C A string is a collection of characters. We'll learn how to declare strings, operate with strings in C programming, and use pre-defined string handling routines. We'll look...

7 minutes read.

Winner tree in Data Structures

Tree Data structure A tree is a hierarchical and non-linear data structure with nodes. Each node in the Tree contains a message value and stores the name passed to another ("child")...

6 minutes read.

Sparse Matrix in Data Structure

Sparse Matrix The sparse matrix is a two-dimensional data object which is made by m rows and n columns, so we can say the number of data values in sparse matrix...

6 minutes read.

Segregate Even and Odd nodes in a Linked List

Segregate even and odd nodes in a Linked List In this problem, we have given a linked list with integer numbers. We need to modify the given linked list in such...

4 minutes read.

Operations on 1D-Arrays

One Dimensional Array Operations Basic Methods The fundamental operations enabled by an array are listed below. Traverse prints each element of the array one by one.Insert a new element at the specified index.Delete...

8 minutes read.

Primitive Data Structure in C

The data structure is a logical or mathematical model for organizing and structuring the main memory or elements. We can classify the data structures in two ways one is primitive, and...

10 minutes read.

Find all possible words from board

We have been given a dictionary of words and a board of characters from which we can form strings. Now, we have to check if the string is present in...

5 minutes read.