Графы с циклами
- From
- Andrey Dashkovsky (2:5002/46.4)
- To
- Vlad
- Date
- 2002-12-11T22:56:04Z
- Area
- RU.ALGORITHMS
Hello vlad.
11 Дек 02 00:53, you wrote to all:
v> Кто нибудь встречал инфу или алгоритмы по работе с графами,
v> содержащими циклы, в частности интересует нахождение оных циклов
Чтобы найти все циклы в графе надо:
1. Найти все базовые
2. перебрать все комбинации базовых, т.е. там что-то типа построений сочетаний,
решений будет очень много, но программа будет тратить время уже не на поиски, а
на вывод решений в файл или на экран
Чтобы найти все базовые делается обычный обход графа вглубину:
1. Берём стартовую вершину
2. Смотрим есть ли она в стеке, если есть то 3.
3. тогда из стека извлекаем всю цепочку от первого вхождения и это будет
базовый цикл
4. если её всётаки в стеке нету, тогда ложим её в стек и берём первую
попавшуюся исходящёю из неё и повторяем 2., причём именно первую, т.к. все
исходящие перебираем в определённом порядке(причём варианта 2 - либо сортировать
вершины по какому-то признаку, но ИМХО это лишнее, можно использовать тот
порядок, в котором заданы вершины)
5.если взять нечего, тогда откатываемся на верх из стека и берём следующую
вершину.и снова п. 2.
6. выход из цикла в том случае если идти уже некуда и в стеке пусто.
Т.о. смысл такой - идём вглубь, пока можем, как только не смогли - откатываемся
наверх, берём следующую исходящую дугу, за той, по которой мы приплыли и снова
идём вглубь, причём все циклы, на которые мы натыкаемся выносим в список базовых
циклов.
Зы. Если что не понятно - спрашивай.
Andrey
... Большому кораблю - большая торпеда.
--- GoldED+/386 1.1.4.7
* Origin: Всёфигня кроме пчёл,хотя пчёлы,еслиподумать,тоже фигня (2:5002/46.4)