Construct a graph from given degrees of all vertices

09 Jul, 2021
This is a C++ program to generate a graph for a given fixed degree sequence. This algorithm generates a undirected graph for the given degree sequence.It does not include self-edge and multiple edges.Examples:  
Input : degrees[] = {2, 2, 1, 1}
Output :  (0)  (1)  (2)  (3)
    (0)    0    1    1    0                              
    (1)    1    0    0    1                   
    (2)    1    0    0    0                       
    (3)    0    1    0    0     
Explanation : We are given that there
are four vertices with degree of vertex
0 as 2, degree of vertex 1 as 2, degree
of vertex 2 as 1 and degree of vertex 3
as 1. Following is graph that follows
given conditions.                   
    (0)----------(1)
     |            | 
     |            | 
     |            |
    (2)          (3) 
 
Approach : 1- Take the input of the number of vertexes and their corresponding degree. 2- Declare adjacency matrix, mat[ ][ ] to store the graph. 3- To create the graph, create the first loop to connect each vertex ‘i’. 4- Second nested loop to connect the vertex ‘i’ to the every valid vertex ‘j’, next to it. 5- If the degree of vertex ‘i’ and ‘j’ are more than zero then connect them. 6- Print the adjacency matrix.Based on the above explanation, below are implementations: 
C++
Java
Python3
C#
Javascript
// C++ program to generate a graph for a// given fixed degrees#include <bits/stdc++.h>using namespace std; // A function to print the adjacency matrix.void printMat(int degseq[], int n){    // n is number of vertices    int mat[n][n];    memset(mat, 0, sizeof(mat));     for (int i = 0; i < n; i++) {        for (int j = i + 1; j < n; j++) {             // For each pair of vertex decrement            // the degree of both vertex.            if (degseq[i] > 0 && degseq[j] > 0) {                degseq[i]--;                degseq[j]--;                mat[i][j] = 1;                mat[j][i] = 1;            }        }    }     // Print the result in specified format    cout << "\n"         << setw(3) << "     ";    for (int i = 0; i < n; i++)        cout << setw(3) << "(" << i << ")";    cout << "\n\n";    for (int i = 0; i < n; i++) {        cout << setw(4) << "(" << i << ")";        for (int j = 0; j < n; j++)            cout << setw(5) << mat[i][j];        cout << "\n";    }} // driver program to test above functionint main(){    int degseq[] = { 2, 2, 1, 1, 1 };    int n = sizeof(degseq) / sizeof(degseq[0]);    printMat(degseq, n);    return 0;}
// Java program to generate a graph for a// given fixed degreesimport java.util.*; class GFG{ // A function to print the adjacency matrix.static void printMat(int degseq[], int n){    // n is number of vertices    int [][]mat = new int[n][n];     for (int i = 0; i < n; i++)    {        for (int j = i + 1; j < n; j++)        {             // For each pair of vertex decrement            // the degree of both vertex.            if (degseq[i] > 0 && degseq[j] > 0)            {                degseq[i]--;                degseq[j]--;                mat[i][j] = 1;                mat[j][i] = 1;            }        }    }     // Print the result in specified format    System.out.print("\n" + setw(3) + "     ");         for (int i = 0; i < n; i++)        System.out.print(setw(3) + "(" + i + ")");    System.out.print("\n\n");    for (int i = 0; i < n; i++)    {        System.out.print(setw(4) + "(" + i + ")");                 for (int j = 0; j < n; j++)            System.out.print(setw(5) + mat[i][j]);        System.out.print("\n");    }} static String setw(int n){    String space = "";    while(n-- > 0)        space += " ";    return space;} // Driver Codepublic static void main(String[] args){    int degseq[] = { 2, 2, 1, 1, 1 };    int n = degseq.length;    printMat(degseq, n);}} // This code is contributed by 29AjayKumar
# Python3 program to generate a graph# for a given fixed degrees # A function to print the adjacency matrix.def printMat(degseq, n):         # n is number of vertices    mat = [[0] * n for i in range(n)]     for i in range(n):        for j in range(i + 1, n):             # For each pair of vertex decrement            # the degree of both vertex.            if (degseq[i] > 0 and degseq[j] > 0):                degseq[i] -= 1                degseq[j] -= 1                mat[i][j] = 1                mat[j][i] = 1     # Print the result in specified form    print("      ", end = " ")    for i in range(n):        print(" ", "(", i, ")", end = "")    print()    print()    for i in range(n):        print(" ", "(", i, ")", end = "")        for j in range(n):            print("     ", mat[i][j], end = "")        print() # Driver Codeif __name__ == '__main__':    degseq = [2, 2, 1, 1, 1]    n = len(degseq)    printMat(degseq, n) # This code is contributed by PranchalK
// C# program to generate a graph for a// given fixed degreesusing System;     class GFG{ // A function to print the adjacency matrix.static void printMat(int []degseq, int n){    // n is number of vertices    int [,]mat = new int[n, n];     for (int i = 0; i < n; i++)    {        for (int j = i + 1; j < n; j++)        {             // For each pair of vertex decrement            // the degree of both vertex.            if (degseq[i] > 0 && degseq[j] > 0)            {                degseq[i]--;                degseq[j]--;                mat[i, j] = 1;                mat[j, i] = 1;            }        }    }     // Print the result in specified format    Console.Write("\n" + setw(3) + "     ");         for (int i = 0; i < n; i++)        Console.Write(setw(3) + "(" + i + ")");    Console.Write("\n\n");    for (int i = 0; i < n; i++)    {        Console.Write(setw(4) + "(" + i + ")");                 for (int j = 0; j < n; j++)            Console.Write(setw(5) + mat[i, j]);        Console.Write("\n");    }} static String setw(int n){    String space = "";    while(n-- > 0)        space += " ";    return space;} // Driver Codepublic static void Main(String[] args){    int []degseq = { 2, 2, 1, 1, 1 };    int n = degseq.Length;    printMat(degseq, n);}} // This code is contributed by Princi Singh
<script> // JavaScript program to generate a graph for a// given fixed degrees // A function to print the adjacency matrix.function printMat(degseq,n){    // n is number of vertices    let mat = new Array(n);    for(let i=0;i<n;i++)    {        mat[i]=new Array(n);        for(let j=0;j<n;j++)            mat[i][j]=0;    }       for (let i = 0; i < n; i++)    {        for (let j = i + 1; j < n; j++)        {               // For each pair of vertex decrement            // the degree of both vertex.            if (degseq[i] > 0 && degseq[j] > 0)            {                degseq[i]--;                degseq[j]--;                mat[i][j] = 1;                mat[j][i] = 1;            }        }    }       // Print the result in specified format    document.write("<br>" + setw(3) + "     ");           for (let i = 0; i < n; i++)        document.write(setw(3) + "(" + i + ")");    document.write("<br><br>");    for (let i = 0; i < n; i++)    {        document.write(setw(4) + "(" + i + ")");                   for (let j = 0; j < n; j++)            document.write(setw(5) + mat[i][j]);        document.write("<br>");    }} function setw(n){    let space = "";    while(n-- > 0)        space += " ";    return space;} // Driver Codelet degseq=[2, 2, 1, 1, 1];let n = degseq.length;printMat(degseq, n); // This code is contributed by rag2127 </script>
Output:  
        (0)  (1)  (2)  (3)  (4)

   (0)    0    1    1    0    0
   (1)    1    0    0    1    0
   (2)    1    0    0    0    0
   (3)    0    1    0    0    0
   (4)    0    0    0    0    0
Time Complexity: O(v*v). 
PranchalKatiyar
29AjayKumar
princi singh
nidhi_biet
rag2127
Graph
Graph
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Dijkstra's shortest path algorithm | Greedy Algo-7
Find if there is a path between two vertices in a directed graph
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Detect Cycle in a Directed Graph
Introduction to Data Structures
Find if there is a path between two vertices in an undirected graph
What is Data Structure: Types, Classifications and Applications
Bellman–Ford Algorithm | DP-23
Minimum number of swaps required to sort an array
m Coloring Problem | Backtracking-5