[Approach] - Traversing the Adjacency List - O(V2) Time and O(1) Space
We can simply traverse the adjacency list for each vertex, and for every neighboring node of that vertex, we mark the corresponding entry mat[i][j] = 1 in the adjacency matrix to represent an edge between them.
Follow the steps below to convert an adjacency list to an adjacency matrix:
Initialize a matrix of size V x V with all entries set to 0.
Iterate through each vertex i in the adjacency list.
For every vertex j in the adjacency list of i, set mat[i][j] = 1.
Below is the implementation of the above approach:
C++
//Driver Code Starts#include<iostream>usingnamespacestd;//Driver Code Endsvector<vector<int>>adjToMat(vector<vector<int>>&adj,intV){// Initialize a matrixvector<vector<int>>matrix(V,vector<int>(V,0));for(inti=0;i<V;i++){for(intj:adj[i])matrix[i][j]=1;}returnmatrix;}//Driver Code StartsvoidaddEdge(vector<vector<int>>&adj,intu,intv,boolisUndirected){if(isUndirected){// undirected graphadj[u].push_back(v);adj[v].push_back(u);}elseadj[u].push_back(v);}intmain(){intV=5;vector<vector<int>>adj(V);// creating adjacency listaddEdge(adj,0,1,true);addEdge(adj,0,2,true);addEdge(adj,1,2,true);addEdge(adj,2,3,true);addEdge(adj,2,4,true);// Get the converted adjacency matrixvector<vector<int>>mat=adjToMat(adj,V);for(inti=0;i<V;i++){for(intj=0;j<V;j++){cout<<mat[i][j]<<" ";}cout<<endl;}}//Driver Code Ends
Java
importjava.util.ArrayList;classGFG{staticint[][]adjToMat(ArrayList<ArrayList<Integer>>adj,intV){// Initialize a matrixint[][]matrix=newint[V][V];for(inti=0;i<V;i++){for(intj:adj.get(i))matrix[i][j]=1;}returnmatrix;}staticvoidaddEdge(ArrayList<ArrayList<Integer>>adj,intu,intv,booleanisUndirected){if(isUndirected){// undirected graphadj.get(u).add(v);adj.get(v).add(u);}elseadj.get(u).add(v);}publicstaticvoidmain(String[]args){intV=5;ArrayList<ArrayList<Integer>>adj=newArrayList<>();// creating adjacency listfor(inti=0;i<V;i++)adj.add(newArrayList<>());addEdge(adj,0,1,true);addEdge(adj,0,2,true);addEdge(adj,1,2,true);addEdge(adj,2,3,true);addEdge(adj,2,4,true);// Get the converted adjacency matrixint[][]mat=adjToMat(adj,V);for(inti=0;i<V;i++){for(intj=0;j<V;j++){System.out.print(mat[i][j]+" ");}System.out.println();}}}
Python
defadjToMat(adj,V):# Initialize a matrixmatrix=[[0]*Vfor_inrange(V)]foriinrange(V):forjinadj[i]:matrix[i][j]=1returnmatrixdefaddEdge(adj,u,v,isUndirected):ifisUndirected:# undirected graphadj[u].append(v)adj[v].append(u)else:adj[u].append(v)V=5adj=[[]for_inrange(V)]# creating adjacency listaddEdge(adj,0,1,True)addEdge(adj,0,2,True)addEdge(adj,1,2,True)addEdge(adj,2,3,True)addEdge(adj,2,4,True)# Get the converted adjacency matrixmat=adjToMat(adj,V)foriinrange(V):print(*mat[i])
C#
usingSystem;usingSystem.Collections.Generic;classGFG{staticint[,]adjToMat(List<List<int>>adj,intV){// Initialize a matrixint[,]matrix=newint[V,V];for(inti=0;i<V;i++){foreach(intjinadj[i])matrix[i,j]=1;}returnmatrix;}staticvoidaddEdge(List<List<int>>adj,intu,intv,boolisUndirected){if(isUndirected){// undirected graphadj[u].Add(v);adj[v].Add(u);}elseadj[u].Add(v);}staticvoidMain(){intV=5;List<List<int>>adj=newList<List<int>>();// creating adjacency listfor(inti=0;i<V;i++)adj.Add(newList<int>());addEdge(adj,0,1,true);addEdge(adj,0,2,true);addEdge(adj,1,2,true);addEdge(adj,2,3,true);addEdge(adj,2,4,true);// Get the converted adjacency matrixint[,]mat=adjToMat(adj,V);for(inti=0;i<V;i++){for(intj=0;j<V;j++){Console.Write(mat[i,j]+" ");}Console.WriteLine();}}}
JavaScript
functionadjToMat(adj,V){// Initialize a matrixletmatrix=Array.from({length:V},()=>Array(V).fill(0));for(leti=0;i<V;i++){for(letjofadj[i])matrix[i][j]=1;}returnmatrix;}functionaddEdge(adj,u,v,isUndirected){if(isUndirected){// undirected graphadj[u].push(v);adj[v].push(u);}elseadj[u].push(v);}// Driver codeletV=5;letadj=Array.from({length:V},()=>[]);// creating adjacency listaddEdge(adj,0,1,true);addEdge(adj,0,2,true);addEdge(adj,1,2,true);addEdge(adj,2,3,true);addEdge(adj,2,4,true);// Get the converted adjacency matrixletmat=adjToMat(adj,V);for(leti=0;i<V;i++){console.log(mat[i].join(" "));}