Тема: Циклы в графах

Как я понял графы задаются перечислением номеров вершин, с которыми соединена текущая вершина (строка).
То есть, например,

   |0|1|2|
--------------
0 |  |1|
1 |0|  |
2 |  |  |

То есть 0я соединена с 1й.
Выходит, что при таком соединении алгоритм будет считать что цикл 0-1.
Хотя там что-то сказано про ориентацию, но я не понял как она задается. Собственно вопрос в том как правильно задать неориентированный граф для алгоритма поиска циклов.

http://e-maxx.ru/algo/finding_cycle

2

Re: Циклы в графах

Эм, там в статье несколько опущен случай неориентированного графа (добавил себе в TODO).

Вообще для неор графа надо немножко изменить алгоритм: навесить одну доп. проверку. А именно, в функцию dfs передавать вершину p - это номер вершины, по которой мы попали в v. Тогда внутри dfs в цикле перед всеми остальными проверками надо дописать проверку:

if (to == p)  continue;

Тем самым мы избежим этой проблемы, которую вы описали: мы никогда не будем пытаться пройти по только что пройденному ребру в обратную сторону.

Соответственно, при вызове dfs (to) мы теперь ещё передаём вершину p, т.е. вместо этого пишем dfs (to, v). В основной программе вызывать надо dfs (i, -1).

3

Re: Циклы в графах

Да, действительно, большое спасибо. У меня возникала такая идея, но я ее почему то отклонил.