Изменения

Перейти к: навигация, поиск

Обход в глубину, цвета вершин

131 байт убрано, 11:03, 17 января 2012
Реализация
=== Реализация ===
Отличие реализации с цветами от предыдущей лишь в массиве visited, который мы назовем теперь color. При этом цвета вершин будут заданы следующим образом: ''белый'' — 0, ''серый'' — 1, ''черный'' — 2.
vector<intcolor_t> color; //вектор для хранения информации о цвете вершин
void dfs(int u)
{
color[u] = 1GRAY; //раскрашиваем вершину в ''серый'' цвет
for (v таких, что (u, v) — ребро в G) //проходим по смежным с u вершинам
if (!color[v]== WHITE) //проверяем, не находились ли мы ранее в выбранной вершине, условие не требует изменений, dfs(v); //поскольку мы считаем вершину "не пройденной" только тогда, когда она ''белого'' цвета, т.е. когда color[v] = 0= WHITE color[u] = 2BLACK; //раскрашиваем вершину в ''черный'' цвет
}
{
... //задание графа G с количеством вершин n.
color.assign(n, 0WHITE); //в начале все вершины в графе ''не пройденные'', т.е. ''белые''.
for (int i = 0; i < n; ++i) //проходим по всем вершинам графа...
if (!color[i]== WHITE) //...не забыв проверить, были мы уже в очередной вершине или нет
dfs(i);
return 0;
Анонимный участник

Навигация