Использование обхода в глубину для проверки связности — различия между версиями
Kasetkin (обсуждение | вклад) |
Kasetkin (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
string color[]; //изначально массив color заполнен значениями white. | string color[]; //изначально массив color заполнен значениями white. | ||
int count = n; //счётчик количества вершин; изначально равен количеству вершин в графе | int count = n; //счётчик количества вершин; изначально равен количеству вершин в графе | ||
− | |||
bool if_connected() | bool if_connected() | ||
dfs(0); //запуск от какой-то вершины | dfs(0); //запуск от какой-то вершины |
Версия 07:36, 10 ноября 2010
Задача
Дан неориентированный граф. Необходимо проверить является ли он связным.
Алгоритм
Небольшая модификация алгоритма обхода в глубину. Идея алгоритма заключается в том, чтобы считать сколько вершин мы посетили во время обхода.
Псевдокод
string color[]; //изначально массив color заполнен значениями white. int count = n; //счётчик количества вершин; изначально равен количеству вершин в графе bool if_connected() dfs(0); //запуск от какой-то вершины if(count == 0) return true; else return false; int dfs(int u) //процедура обхода в глубину. запуск от номера вершины for(v: uv - ребро) if(color[v] == white) dfs(v); color[u] = black; count--;