Convert Adjacency List to Adjacency Matrix representation of a Graph - GeeksforGeeks

30 Jun, 2021
Given an adjacency list representation of a Graph, the task is to convert the given Adjacency List to Adjacency Matrix representation.
Examples:  
Input: adjList[] = {{0 –> 1 –> 3}, {1 –> 2}, {2 –> 3}} Output: 0 1 0 10 0 1 00 0 0 10 0 0 0
Input: adjList[] = {{0 –> 1 –> 4}, {1 –> 0 –> 2 –> 3 –> 4}, {2 –> 1 –> 3}, {3 –> 1 –> 2 –> 4}, {4 –> 0 –> 1 –> 3}} Output: 0 1 0 0 11 0 1 1 10 1 0 1 00 1 1 0 11 1 0 1 0 
Adjacency List: An array of lists is used. The size of the array is equal to the number of vertices. Let the array be an array[]. An entry array[i] represents the list of vertices adjacent to the ith Vertex.
Adjacency Matrix: Adjacency Matrix is a 2D array of size V x V where V is the number of vertices in a graph. Let the 2D array be adj[][], a slot adj[i][j] = 1 indicates that there is an edge from vertex i to vertex j.
Follow the steps below to convert an adjacency list to an adjacency matrix: 
Initialize a matrix with 0s.
Iterate over the vertices in the adjacency list
For every jth vertex in the adjacency list, traverse its edges.
For each vertex i with which the jth vertex has an edge, set mat[i][j] = 1.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ Program to implement// the above approach#include <bits/stdc++.h>using namespace std; // Function to insert vertices to adjacency listvoid insert(vector<int> adj[], int u, int v){    // Insert a vertex v to vertex u    adj[u].push_back(v);    return;} // Function to display adjacency listvoid printList(vector<int> adj[], int V){    for (int i = 0; i < V; i++) {        cout << i;        for (auto j : adj[i])            cout << " --> " << j;        cout << endl;    }    cout << endl;} // Function to convert adjacency// list to adjacency matrixvector<vector<int> > convert(vector<int> adj[],                             int V){    // Initialize a matrix    vector<vector<int> > matrix(V,                                vector<int>(V, 0));     for (int i = 0; i < V; i++) {        for (auto j : adj[i])            matrix[i][j] = 1;    }    return matrix;} // Function to display adjacency matrixvoid printMatrix(vector<vector<int> > adj, int V){    for (int i = 0; i < V; i++) {        for (int j = 0; j < V; j++) {            cout << adj[i][j] << "   ";        }        cout << endl;    }    cout << endl;} // Driver codeint main(){    int V = 5;     vector<int> adjList[V];     // Inserting edges    insert(adjList, 0, 1);    insert(adjList, 0, 4);    insert(adjList, 1, 0);    insert(adjList, 1, 2);    insert(adjList, 1, 3);    insert(adjList, 1, 4);    insert(adjList, 2, 1);    insert(adjList, 2, 3);    insert(adjList, 3, 1);    insert(adjList, 3, 2);    insert(adjList, 3, 4);    insert(adjList, 4, 0);    insert(adjList, 4, 1);    insert(adjList, 4, 3);     // Display adjacency list    cout << "Adjacency List: \n";    printList(adjList, V);     // Function call which returns    // adjacency matrix after conversion    vector<vector<int> > adjMatrix        = convert(adjList, V);     // Display adjacency matrix    cout << "Adjacency Matrix: \n";    printMatrix(adjMatrix, V);     return 0;}
// Java program to implement// the above approachimport java.util.*; class GFG{ // Function to insert vertices to adjacency liststatic void insert(Vector<Integer> adj[],                   int u, int v){         // Insert a vertex v to vertex u    adj[u].add(v);    return;} // Function to display adjacency liststatic void printList(Vector<Integer> adj[],                      int V){    for(int i = 0; i < V; i++)    {        System.out.print(i);         for(int j : adj[i])            System.out.print(" --> " + j);                     System.out.println();    }    System.out.println();} // Function to convert adjacency// list to adjacency matrixstatic int[][] convert(Vector<Integer> adj[],                       int V){         // Initialize a matrix    int [][]matrix = new int[V][V];     for(int i = 0; i < V; i++)    {        for(int j : adj[i])            matrix[i][j] = 1;    }    return matrix;} // Function to display adjacency matrixstatic void printMatrix(int[][] adj, int V){    for(int i = 0; i < V; i++)    {        for(int j = 0; j < V; j++)        {            System.out.print(adj[i][j] + " ");        }        System.out.println();    }    System.out.println();} // Driver codepublic static void main(String[] args){    int V = 5;     @SuppressWarnings("unchecked")    Vector<Integer> []adjList = new Vector[V];    for(int i = 0; i < adjList.length; i++)        adjList[i] = new Vector<Integer>();             // Inserting edges    insert(adjList, 0, 1);    insert(adjList, 0, 4);    insert(adjList, 1, 0);    insert(adjList, 1, 2);    insert(adjList, 1, 3);    insert(adjList, 1, 4);    insert(adjList, 2, 1);    insert(adjList, 2, 3);    insert(adjList, 3, 1);    insert(adjList, 3, 2);    insert(adjList, 3, 4);    insert(adjList, 4, 0);    insert(adjList, 4, 1);    insert(adjList, 4, 3);     // Display adjacency list    System.out.print("Adjacency List: \n");    printList(adjList, V);     // Function call which returns    // adjacency matrix after conversion    int[][] adjMatrix = convert(adjList, V);     // Display adjacency matrix    System.out.print("Adjacency Matrix: \n");    printMatrix(adjMatrix, V);}} // This code is contributed by amal kumar choubey
# Python3 program to implement# the above approach  # Function to insert vertices# to adjacency listdef insert(adj, u, v):     # Insert a vertex v to vertex u    adj[u].append(v)    return # Function to display adjacency listdef printList(adj, V):         for i in range(V):        print(i, end = '')                 for j in adj[i]:            print(' --> ' + str(j), end = '')                     print()             print()         # Function to convert adjacency# list to adjacency matrixdef convert(adj, V):     # Initialize a matrix    matrix = [[0 for j in range(V)]                 for i in range(V)]         for i in range(V):        for j in adj[i]:            matrix[i][j] = 1         return matrix  # Function to display adjacency matrixdef printMatrix(adj, V):         for i in range(V):        for j in range(V):            print(adj[i][j], end = ' ')                     print()             print()         # Driver codeif __name__=='__main__':     V = 5      adjList = [[] for i in range(V)]      # Inserting edges    insert(adjList, 0, 1)    insert(adjList, 0, 4)    insert(adjList, 1, 0)    insert(adjList, 1, 2)    insert(adjList, 1, 3)    insert(adjList, 1, 4)    insert(adjList, 2, 1)    insert(adjList, 2, 3)    insert(adjList, 3, 1)    insert(adjList, 3, 2)    insert(adjList, 3, 4)    insert(adjList, 4, 0)    insert(adjList, 4, 1)    insert(adjList, 4, 3)      # Display adjacency list    print("Adjacency List: ")    printList(adjList, V)      # Function call which returns    # adjacency matrix after conversion    adjMatrix = convert(adjList, V)      # Display adjacency matrix    print("Adjacency Matrix: ")    printMatrix(adjMatrix, V)  # This code is contributed by rutvik_56
// C# program to implement// the above approachusing System;using System.Collections.Generic; class GFG{ // Function to insert vertices to adjacency liststatic void insert(List<int> []adj,                        int u, int v){         // Insert a vertex v to vertex u    adj[u].Add(v);    return;} // Function to display adjacency liststatic void printList(List<int> []adj,                           int V){    for(int i = 0; i < V; i++)    {        Console.Write(i);         foreach(int j in adj[i])            Console.Write(" --> " + j);                     Console.WriteLine();    }    Console.WriteLine();} // Function to convert adjacency// list to adjacency matrixstatic int[,] convert(List<int> []adj,                           int V){         // Initialize a matrix    int [,]matrix = new int[V, V];     for(int i = 0; i < V; i++)    {        foreach(int j in adj[i])            matrix[i, j] = 1;    }    return matrix;} // Function to display adjacency matrixstatic void printMatrix(int[,] adj, int V){    for(int i = 0; i < V; i++)    {        for(int j = 0; j < V; j++)        {            Console.Write(adj[i, j] + " ");        }        Console.WriteLine();    }    Console.WriteLine();} // Driver codepublic static void Main(String[] args){    int V = 5;     List<int> []adjList = new List<int>[V];    for(int i = 0; i < adjList.Length; i++)        adjList[i] = new List<int>();             // Inserting edges    insert(adjList, 0, 1);    insert(adjList, 0, 4);    insert(adjList, 1, 0);    insert(adjList, 1, 2);    insert(adjList, 1, 3);    insert(adjList, 1, 4);    insert(adjList, 2, 1);    insert(adjList, 2, 3);    insert(adjList, 3, 1);    insert(adjList, 3, 2);    insert(adjList, 3, 4);    insert(adjList, 4, 0);    insert(adjList, 4, 1);    insert(adjList, 4, 3);     // Display adjacency list    Console.Write("Adjacency List: \n");    printList(adjList, V);     // Function call which returns    // adjacency matrix after conversion    int[,] adjMatrix = convert(adjList, V);     // Display adjacency matrix    Console.Write("Adjacency Matrix: \n");    printMatrix(adjMatrix, V);}} // This code is contributed by amal kumar choubey
<script>  // Javascript program to implement// the above approach // Function to insert vertices to adjacency listfunction insert(adj, u, v){         // Insert a vertex v to vertex u    adj[u].push(v);    return;} // Function to display adjacency listfunction printList(adj, V){    for(var i = 0; i < V; i++)    {        document.write(i);         for(var j of adj[i])            document.write(" --> " + j);                     document.write("<br>");    }    document.write("<br>");} // Function to convert adjacency// list to adjacency matrixfunction convert(adj, V){         // Initialize a matrix    var matrix = Array.from(Array(V), ()=>Array(V).fill(0));    for (var i = 0; i < V; i++) {        for (var j of adj[i])            matrix[i][j] = 1;    }    return matrix;} // Function to display adjacency matrixfunction printMatrix(adj, V){    for(var i = 0; i < V; i++)    {        for(var j = 0; j < V; j++)        {            document.write(adj[i][j] + " ");        }        document.write("<br>");    }    document.write("<br>");} // Driver codevar V = 5;var adjList = Array.from(Array(V), ()=>Array().fill(0));     // Inserting edgesinsert(adjList, 0, 1);insert(adjList, 0, 4);insert(adjList, 1, 0);insert(adjList, 1, 2);insert(adjList, 1, 3);insert(adjList, 1, 4);insert(adjList, 2, 1);insert(adjList, 2, 3);insert(adjList, 3, 1);insert(adjList, 3, 2);insert(adjList, 3, 4);insert(adjList, 4, 0);insert(adjList, 4, 1);insert(adjList, 4, 3);// Display adjacency listdocument.write("Adjacency List: <br>");printList(adjList, V);// Function call which returns// adjacency matrix after conversionvar adjMatrix = convert(adjList, V);// Display adjacency matrixdocument.write("Adjacency Matrix: <br>");printMatrix(adjMatrix, V);  </script>
Adjacency List: 
0 --> 1 --> 4
1 --> 0 --> 2 --> 3 --> 4
2 --> 1 --> 3
3 --> 1 --> 2 --> 4
4 --> 0 --> 1 --> 3

Adjacency Matrix: 
0   1   0   0   1   
1   0   1   1   1   
0   1   0   1   0   
0   1   1   0   1   
1   1   0   1   0
 
Time Complexity: O(N*M) Auxiliary Space: O(N2) 
Amal Kumar Choubey
rutvik_56
rrrtnx
Graph Traversals
graph-basics
Data Structures
Graph
Data Structures
Graph
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
SDE SHEET - A Complete Guide for SDE Preparation
DSA Sheet by Love Babbar
How to Start Learning DSA?
Introduction to Algorithms
Insertion and Deletion in Heaps
Dijkstra's shortest path algorithm | Greedy Algo-7
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
Topological Sorting
Bellman–Ford Algorithm | DP-23