Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector < vector<int> > g; // граф
- int n; // число вершин
- vector<int> color; // цвет вершины (0, 1, или 2)
- vector<int> time_in, time_out; // "времена" захода и выхода из вершины
- int dfs_timer = 0; // "таймер" для определения времён
- void dfs2 (int v) {
- time_in[v] = dfs_timer++;
- color[v] = 1;
- for (vector<int>::iterator i=g[v].begin(); i!=g[v].end(); ++i)
- if (color[*i] == 0)
- dfs (*i);
- color[v] = 2;
- time_out[v] = dfs_timer++;
- }
- //Это наиболее общий код. Во многих случаях времена захода и выхода из вершины не важны,
- //так же как и не важны цвета вершин (но тогда надо будет ввести аналогичный по смыслу булевский массив used).
- //Вот наиболее простая реализация:
- vector<char> used;
- void dfs3 (int v) {
- used[v] = true;
- for (vector<int>::iterator i=g[v].begin(); i!=g[v].end(); ++i)
- if (!used[*i])
- dfs (*i);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement