Open In App

Indegree of a Graph

Indegree of a vertex is defined as the number of incoming edges incident on a vertex in a directed graph.

Significance Of Indegree:

How to calculate Indegree of a node?

Example of directed graph

Consider the above directed graph for calculation of indegree of a node or vertex.



For calculating the indegree, we calculate the number of arrows pointing towards the node. For e.g. for vertex V4 there are two arrows pointing toward the node with edges as e3 and e4. therefore Indegree(V4) =2

Similarly,



This is how we calculate the indegree of a node in a directed graph.

Finding Indegre of Directed Graph using its adjacency list:

Approach:

Below is implementation of Above:




// C++ program for the above approach
#include <iostream>
#include <vector>
 
using namespace std;
 
void findInDegree(const vector<vector<int>>& adjList, int n)
{
    vector<int> inDegree(n, 0);
 
    for (const vector<int>& list : adjList)
    {
        for (int element : list)
        {
            // Every vertex that has an incoming
            // edge from i
            inDegree[element]++;
        }
    }
 
    for (int k = 0; k < n; k++)
    {
        cout << "Vertex " << k << " has in-degree: " << inDegree[k] << endl;
    }
}
 
int main()
{
    // Adjacency list representation of the graph
    vector<vector<int>> adjacency = {
        // Vertices 3 and 4 have an incoming edge
        // from vertex 0
        {3, 4},
        // Vertex 3 and 2 has an incoming edge from vertex 1
        {3, 2},
        // no incoming edge from vertex 2
        {},
        // Vertices 2 and 4 have an incoming edge
        // from vertex 3
        {2, 4},
        // Vertices 2 and 3 have an incoming edge
        // from vertex 4
        {2, 3},
        // Vertices 1,4 and 6 have an incoming edge
        // from vertex 5
        {1, 4, 6},
        // Vertex 5 has an incoming edge from vertex 6
        {5}
    };
 
    int n = adjacency.size();
    findInDegree(adjacency, n);
 
    return 0;
}
 
 
// This code is contributed by Pushpesh Raj.




import java.util.*;
 
class GFG {
    static void findInDegree(List<List<Integer> > adjList,
                             int n)
    {
        int indgree[] = new int[n];
        for (List<Integer> list : adjList) {
            for (int element : list)
                // Every vertex that has an incoming
                // edge from i
                indgree[element]++;
        }
        for (int k = 0; k < n; k++) {
            System.out.println("Vertex " + k
                               + " has indgree"
                               + "\t" + indgree[k]);
        }
    }
 
    // Driver code
    public static void main(String args[])
    {
        // Adjacency list representation of the graph
        List<List<Integer> > adjacency = new ArrayList<>();
 
        // Vertices 3 and 4 have an incoming edge
        // from vertex 0
        List<Integer> tmp
            = new ArrayList<Integer>(Arrays.asList(3, 4));
        adjacency.add(tmp);
 
        // Vertex 3 and 2 has an incoming edge from vertex 1
        tmp = new ArrayList<Integer>(Arrays.asList(3, 2));
        adjacency.add(tmp);
 
        // no incoming edge from vertex 2
        tmp = new ArrayList<Integer>(Arrays.asList());
        adjacency.add(tmp);
 
        // Vertices 2 and 4 have an incoming edge
        // from vertex 3
        tmp = new ArrayList<Integer>(Arrays.asList(2, 4));
        adjacency.add(tmp);
 
        // Vertices 2 and 3 have an incoming edge
        // from vertex 4
        tmp = new ArrayList<Integer>(Arrays.asList(2, 3));
        adjacency.add(tmp);
 
        // Vertices 1,4 and 6 have an incoming edge
        // from vertex 5
        tmp = new ArrayList<Integer>(
            Arrays.asList(1, 4, 6));
        adjacency.add(tmp);
 
        // Vertex 5 has an incoming edge from vertex 6
        tmp = new ArrayList<Integer>(Arrays.asList(5));
        adjacency.add(tmp);
 
        int n = adjacency.size();
        findInDegree(adjacency, n);
        // This Code is Contributed By Vikas Bishnoi
    }
}




def find_in_degree(adj_list, n):
    in_degree = [0] * n
 
    for adj_vertices in adj_list:
        for vertex in adj_vertices:
            # Every vertex that has an incoming edge from vertex i
            in_degree[vertex] += 1
 
    for k in range(n):
        print(f"Vertex {k} has in-degree: {in_degree[k]}")
 
if __name__ == "__main__":
    # Adjacency list representation of the graph
    adjacency = [
        [3, 4],   # Vertices 3 and 4 have an incoming edge from vertex 0
        [3, 2],   # Vertex 3 and 2 has an incoming edge from vertex 1
        [],       # no incoming edge from vertex 2
        [2, 4],   # Vertices 2 and 4 have an incoming edge from vertex 3
        [2, 3],   # Vertices 2 and 3 have an incoming edge from vertex 4
        [1, 4, 6],  # Vertices 1, 4, and 6 have an incoming edge from vertex 5
        [5]       # Vertex 5 has an incoming edge from vertex 6
    ]
 
    n = len(adjacency)
    find_in_degree(adjacency, n)




// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG
{
    static void findindgree(List<List<int>> adjList, int n)
    {
        int[] indgree = new int[n];
        foreach (List<int> list in adjList)
        {
            foreach (int element in list)
            {
                // Every vertex that has an incoming
                // edge from i
                indgree[element]++;
            }
        }
        for (int k = 0; k < n; k++)
        {
            Console.WriteLine("Vertex " + k + " has indgree" + "\t" + indgree[k]);
        }
    }
 
    // Driver code
    public static void Main(string[] args)
    {
        // Adjacency list representation of the graph
        List<List<int>> adjacency = new List<List<int>>();
 
        // Vertices 3 and 4 have an incoming edge from vertex 0
        List<int> tmp = new List<int>(new int[] { 3, 4 });
        adjacency.Add(tmp);
 
        // Vertex 3 and 2 have an incoming edge from vertex 1
        tmp = new List<int>(new int[] { 3, 2 });
        adjacency.Add(tmp);
 
        // No incoming edge from vertex 2
        tmp = new List<int>();
        adjacency.Add(tmp);
 
        // Vertices 2 and 4 have an incoming edge from vertex 3
        tmp = new List<int>(new int[] { 2, 4 });
        adjacency.Add(tmp);
 
        // Vertices 2 and 3 have an incoming edge from vertex 4
        tmp = new List<int>(new int[] { 2, 3 });
        adjacency.Add(tmp);
 
        // Vertices 1, 4, and 6 have an incoming edge from vertex 5
        tmp = new List<int>(new int[] { 1, 4, 6 });
        adjacency.Add(tmp);
 
        // Vertex 5 has an incoming edge from vertex 6
        tmp = new List<int>(new int[] { 5 });
        adjacency.Add(tmp);
 
        int n = adjacency.Count;
        findindgree(adjacency, n);
    }
}
 
// This code is contributed by Utkarsh Kumar




// JavaScript program for finding in-degrees of vertices in a directed graph
 
function findInDegree(adjList, n) {
    let inDegree = Array(n).fill(0);
 
    for (let list of adjList) {
        for (let element of list) {
            // Every vertex that has an incoming edge from i
            inDegree[element]++;
        }
    }
 
    for (let k = 0; k < n; k++) {
        console.log(`Vertex ${k} has in-degree: ${inDegree[k]}`);
    }
}
 
// Main function
function main() {
    // Adjacency list representation of the graph
    let adjacency = [
        // Vertices 3 and 4 have an incoming edge from vertex 0
        [3, 4],
        // Vertex 3 and 2 have an incoming edge from vertex 1
        [3, 2],
        // no incoming edge from vertex 2
        [],
        // Vertices 2 and 4 have an incoming edge from vertex 3
        [2, 4],
        // Vertices 2 and 3 have an incoming edge from vertex 4
        [2, 3],
        // Vertices 1, 4, and 6 have an incoming edge from vertex 5
        [1, 4, 6],
        // Vertex 5 has an incoming edge from vertex 6
        [5]
    ];
 
    let n = adjacency.length;
    findInDegree(adjacency, n);
}
 
// Calling the main function
main();

Output
Vertex 0 has indgree    0
Vertex 1 has indgree    1
Vertex 2 has indgree    3
Vertex 3 has indgree    3
Vertex 4 has indgree    3
Vertex 5 has indgree    1
Vertex 6 has indgree    1






Time Complexity: O(V + E) where V and E are the numbers of vertices and edges in the graph respectively.
Auxiliary Space: O(V) As additionally we only use indegree array to store output


Article Tags :