Использование обхода в глубину для проверки связности — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «Небольшая модификация алгоритма обхода в глубину позволяет проверить связность неориент…»)
 
Строка 1: Строка 1:
 
Небольшая модификация алгоритма обхода в глубину позволяет проверить связность неориентированного графа.
 
Небольшая модификация алгоритма обхода в глубину позволяет проверить связность неориентированного графа.
Один из вариантов алгоритма заключается в том, чтобы считать сколько вершин мы посетили во время обхода.
+
Идея алгоритма заключается в том, чтобы считать сколько вершин мы посетили во время обхода.
  
  string color[];        //изначально массив color заполнен значениями white.
 
  int count = n;          //счётчик количества вершин; изначально равен количеству вершин в графе
 
  
  bool if_connected()   
+
string color[];         //изначально массив color заполнен значениями white.
    dfs(0);               //запуск от какой-то вершины
+
  int count = n;         //счётчик количества вершин; изначально равен количеству вершин в графе
    if(count == 0)
 
      return true;
 
    else
 
      return false;
 
 
 
  
  int dfs(int u)        //процедура обхода в глубину. запуск от номера вершины
+
bool if_connected()   
      for(v: uv - ребро)
+
  dfs(0);              //запуск от  какой-то вершины
      if(color[v] == white)
+
  if(count == 0)
        dfs(v);
+
    return true;
    color[u] = black;
+
  else
    count--;
+
    return false;
 +
 +
int dfs(int u)        //процедура обхода в глубину. запуск от номера вершины
 +
    for(v: uv - ребро)
 +
    if(color[v] == white)
 +
      dfs(v);
 +
  color[u] = black;
 +
  count--;

Версия 05:46, 9 ноября 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--;