bool[][], vector<bool>[], int[][]
для мульти или взвешенного
-
: перебор соседей O(n), память O(n2), неудобно хранить мульти-взвешенный граф+
: наличие/добавление/удаление ребра за O(1)vector/set/list<int>[]
+
: перебор соседей O(deg), память O(m)-
: наличие/удаление ребра за O(deg) и O(log(deg))head[vertex], vector<edge> edges; struct edge { int to, next; };
dfs(int v) // простейшая версия
.. if (visited[v]) return
.. visited[v] = true
.. for (int u : g[v]) dfs(u)
for (int i = 0; i < n; ++i) if (!visited[i]) dfs(i)