Ориентированный граф. найти циклы.

grnat

Ориентированный граф Сохранен в виде матрицы, дуги это 1. Нужно найти циклы в этом графе, Как это сделать помогите

a10063

найти все циклы или выяснить существование?

vall

алгоритм Флойда Уоршолла.
for m 1..n
for i 1..n
for j 1..n
if a[i, m] and a[m, j] then a[i, j] := true
после этого если a[i, i] = true то эта вершина в цикле
можно в эту же матрицу m складывать, тогда и цикл можно узнать.
блин, в обоих фамилиях ошибся

psihodog

после этого если a[i, i] = true то эта вершина в цикле
а если a[i, i] == false, то не в цикле.
Красота!

grnat

Найти все максимальные циклы.

grnat

А что ты найдешь этим перебором? и зачем портить начальную матрицу? что такое вершина в Цикле?
Цикл - из лбой вершины цикла можно попасть в любую другую вершину цикла

zorin29

А что ты найдешь этим перебором? и зачем портить начальную матрицу? что такое вершина в Цикле?
A может быть не самой матрицей смежности, а ее дубликатом. После выполнения этого алгоритма она превращается в матрицу достижимости: A[i,j] = "Из i можно попасть в j". Если A[i,i], то, очевидно, вершина i принадлежит какому-то циклу, а то и не одному.
Найти все максимальные циклы.
--- таким способом не получится. Имеется в виду простой цикл, т.е. без повторений вершин, кроме первой и последней, я правильно понял?
Я думаю, можно найти их с помощью какой-то модификации поиска в глубину. Что-то подобное, ИМХО, делалось в Кормене, в главе про графы. Если надо, могу попробовать додумать до конца

Dasar

> Как это сделать помогите
Открыть книжку: алгоритмы на графах, и не изобретать велосипед?

grnat

Буду очень Благодарен.
2 DarkGrey
Открыть книжку: алгоритмы на графах, и не изобретать велосипед?
Где ее взять, мб ссылку дашь какую-нибудь?
Послать куда нибудь(хоть бы путь указал куда ) всегда легко, а вот дать толковый совет - это уж другое дело

zorin29

После некоторых раздумий я понял, что был неправ. Нельзя искать циклы никакой модификацией поиска в глубину, а надо это делать только перебором.
Потому что, если в графе есть гамильтонов цикл, то таким алгоритмом он найдется как самый длинный, а задача поиска гамильтонова цикла - NP-полная.
Так что можно с чистым сердцем писать полный перебор, например, рекурсивный.

maggi14

Могу дать книжку, где про это написано. Не уверен, что хорошая - сам не читал. Нужна?

Vladu

http://jgrapht.sourceforge.net/

JGraphT is a free Java graph library that provides mathematical graph-theory objects and algorithms. JGraphT supports various types of graphs including:
* directed and undirected graphs.
* graphs with weighted / unweighted / labeled or any user-defined edges.
* various edge multiplicity options, including: simple-graphs, multigraphs, pseudographs.
* unmodifiable graphs - allow modules to provide "read-only" access to internal graphs.
* listenable graphs - allow external listeners to track modification events.
* subgraphs graphs that are auto-updating subgraph views on other graphs.
* all compositions of above graphs.

Пацаны обещают, что будет просто.

Nugos

Попробуй здесь глянуть.
http://www.gtl.kis.ru/content.htm
Это библиотека графов, по типу stl. Там коего-чего есть по циклам. Есть исходники кое-какие описания и ссылки на литератру. Написана на с++.
Правда она не развивается с 98 года.
Оставить комментарий
Имя или ник:
Комментарий: