Материал из Викиконспекты
Лемма: |
Не существует такого момента выполнения поиска в глубину, в который бы существовало ребро из черной вершины в белую. |
Доказательство: |
[math]\triangleright[/math] |
Пусть в процессе выполнения процедуры [math]dfs[/math] нашлось ребро из черной вершины [math]v[/math] в белую вершину [math]u[/math]. Рассмотрим момент времени, когда мы запустили [math]dfs(v)[/math]. В этот момент вершина [math]v[/math] была перекрашена из белого в серый, а вершина [math]u[/math] была белая. Далее в ходе выполнения алгоритма будет запущен [math]dfs(u)[/math], поскольку обход в глубину обязан посетить все белые вершины, в которые есть ребро из [math]v[/math]. По алгоритму вершина [math]v[/math] будет покрашена в черный цвет тогда, когда завершится обход всех вершин, достижимых из нее по одному ребру, кроме тех, что были рассмотрены раньше нее. Таким образом, вершина [math]v[/math] может стать черной только тогда, когда [math]dfs[/math] выйдет из вершины [math]u[/math], и она будет покрашена в черный цвет. Получаем противоречие. |
[math]\triangleleft[/math] |
Следствие
Лемма о белых путях.
Лемма: |
Пусть дан граф [math]G[/math]. Запустим [math]dfs(G)[/math]. Остановим выполнение процедуры [math]dfs[/math] от какой-то вершины [math]u[/math] графа [math]G[/math] в тот момент, когда вершина [math]u[/math] была выкрашена в серый цвет (назовем его первым моментом времени). Заметим, что в данный момент в графе [math]G[/math] есть как белые, так и черные, и серые вершины. Продолжим выполнение процедуры [math]dfs(u)[/math] до того момента, когда вершина [math]u[/math] станет черной (второй момент времени).
Тогда вершины графа [math]G\setminus u[/math], бывшие черными и серыми в первый момент времени, не поменяют свой цвет ко второму моменту времени, а белые вершины либо останутся белыми, либо станут черными, причем черными станут те, что были достижимы от вершины [math]u[/math] по белым путям. |
Доказательство: |
[math]\triangleright[/math] |
Черные вершины останутся черными, потому что цвет может меняться только по схеме белый [math]\to[/math] серый [math]\to[/math] черный. Серые останутся серыми, потому что они лежат в стеке рекурсии и там и останутся.
Далее докажем два факта:
Утверждение: |
Если вершина была достижима по белому пути в первый момент времени, то она стала черной ко второму моменту времени; |
[math]\triangleright[/math] |
Если вершина [math]v[/math] была достижима по белому пути из [math]u[/math], но осталась белой, это значит, что во второй момент времени на пути из [math]u[/math] в [math]v[/math] встретится ребро из черной вершины в белую, чего не может быть по лемме, доказанной выше. | [math]\triangleleft[/math] |
Утверждение: |
Если вершина стала черной ко второму моменту времени, то она была достижима по белому пути в первый момент времени. |
[math]\triangleright[/math] |
Рассмотрим момент, когда вершина [math]v[/math] стала черной: в этот момент существует cерый путь из [math]u[/math] в [math]v[/math], а это значит, что в первый момент времени сущестовал белый путь из [math]u[/math] в [math]v[/math], что и требовалось доказать. | [math]\triangleleft[/math] |
Отсюда следует, что если вершина стала из белой черной, то она была достижима по белому пути, и что если вершина как была, так и осталась белой, она не была достижима по белому пути, что и требовалось доказать. |
[math]\triangleleft[/math] |