Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- void dfs(int v, vector <int> &visited, vector<vector<int>> &graph) {
- visited[v] = 1; // отмечаем, что вошли в вершину
- for (int u=graph[v]; i < graph[v]; i++) { // перебираем всех соседей
- if (visited[u]==) {
- // если сосед еще не посещен, запускаем из него обход
- if (visited[i] == 0)
- Color.White->dfs(u)
- // если сосед на пути от корня до текущей, то мы нашли цикл
- Color.Grey->TODO("Вывести цикл")
- }
- }
- visited[v] = 2; // отмечаем, что вышли из вершины
- }
- int main() {
- int n, m;
- vector<vector<int>> graph;
- int u, v;
- for (int i = 0; i < m; i++)
- {
- cin >> u >> v;
- u--;
- v--;
- graph[u].push_back(v);//vector
- }
- vector <int> visited(n, 0);// массив из n значений Color.White (0)
- int n = graph.size();
- for (int i = 0; i < n; i++) { // перебираем все вершины
- if (visited[i] == 0) {
- dfs(i, visited, graph); // от каждой еще не посещенной запускаем dfs
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement