gph
- это vector
из int
, поэтому вы не можете получить доступ к методу push_back
в graph[u]
, потому что graph[u]
- это int
!
Вы можете представить список смежностикак эффективная матрица (2D) из int
, где вы можете иметь строки разных размеров.Но в конечном итоге это 2D структура.Это означает, что вы должны объявить свой список смежности как vector<vector<int>>
.
Следующий код должен дать вам некоторое представление о том, как он работает:
#include<iostream>
#include<vector>
using Graph = std::vector<std::vector<int>>;
void addedge(Graph &graph, const int u, const int v) {
graph[u].push_back(v);
graph[v].push_back(u);
}
void printgraph(const Graph &gph) {
for (int node = 0 ; node < gph.size() ; node++) {
std::cout<<node<<" : ";
for (auto x : gph[node]) {
std::cout << x << " ";
}
std::cout<<std::endl;
}
}
int main() {
Graph gph(8, std::vector<int>());
addedge(gph, 2, 3);
addedge(gph, 6, 7);
addedge(gph, 1, 2);
printgraph(gph);
}