Тогда можно использовать поиск в глубину не для нахождения всех циклов, чтобы потом их пересекать, как я собирался, а для проверки на цикличность вместо Флойда — Уоршалла как
здесь. Щас попробую понять сложность поиска в глубину. Мне почему-то кажется, что она меньше
!
Ну да, и вроде вообще
. Ага, нет, если граф не сильно связный, то придётся запускать поиск до
раз для всё ещё непосещённых вершин, к тому же, критерий цикла уже не работает. Да, в моём случае, наверно, ваш способ единственно возможный.
-- Вс окт 31, 2010 17:24:48 --Не хочу трогать матрицу. Наверно, получится что-то типа этого:
Код:
for u in V // этот цикл по убираемой вершине
for k in V
if k = u continue
for i in V
if i = u continue
for j in V
if j = u continue
E[i, j] := E[i, j] || E[i, k] && E[k, j]
Cyclic := false
for i in V
if E[i, i]
Cyclic := true
break
if !Cyclic return true
return false
Ничего не упустил?