0

beginner here, I was implementing an adjacency list to represent the graph in C++, I was stuck conceptually in the below code snippet.

void addEdge(vector<int> adj[], int s, int d) {
  adj[s].push_back(d);
  adj[d].push_back(s);
}

vector<int> adj[] will contain list of all nodes My question is we have 1D vector adj[], how are we able to push multiple elements within the single-cell / index of adj[], wouldn't that require a 2D vector like vector<vector<int>> adj[];

By pushing multiple elements I want to clarify, the adjacent vertices for that particular node will get pushed in that particular index

The entire code::

// Adjacency List representation in C++

#include <bits/stdc++.h>
using namespace std;

// Add edge
void addEdge(vector<int> adj[], int s, int d) {
  adj[s].push_back(d);
  adj[d].push_back(s);
}

// Print the graph
void printGraph(vector<int> adj[], int V) {
  for (int d = 0; d < V; ++d) {
    cout << "\n Vertex "
       << d << ":";
    for (auto x : adj[d])
      cout << "-> " << x;

    printf("\n");
    cout << "\nsize=" << adj[d].size()<<"\n";
  }
}

int main() {

  int V = 5;

  // Create a graph
  vector<int> adj[V];

  // Add edges
  addEdge(adj, 0, 1);
  addEdge(adj, 0, 2);
  addEdge(adj, 0, 3);
  addEdge(adj, 1, 2);
  printGraph(adj, V);

  cout << "\n\nmatrix cell"
       << adj[0][2];
}

output:

 Vertex 0:-> 1-> 2-> 3

size=3

 Vertex 1:-> 0-> 2    

size=2

 Vertex 2:-> 0-> 1    

size=2

 Vertex 3:-> 0

size=1

 Vertex 4:

size=0
Mystogan
  • 1
  • 1

0 Answers0