длиннейший путь на ориентированном графе
подскажите названия подходящих алгоритмов.
Могу предложить идею:
- найти какой-нибудь цикл и пометить входящие в него ребра
- искать циклы, состоящие из не выделенных ребер и ребер, обратных выделенным. Каждый найденный цикл нужно будет добавлять к выделенному.
Таким образом касающиеся циклы будут объединяться в один цикл.
Процесс завершится, когда объединять будет уже нечего. Останется выбрать самый большой из найденного.
собственно, сам путь меня не интересует, а интересует длина этого пути
а вообще я могу дать всю задачку:
существует множество пар чисел {(a,b)} 0<a,b<n
оно обладает следующими свойствами:
a!=b
для любых a,b может существовать (а может и не существовать) только одна пара во множестве
пары можно выстраивать в цепочки типа
(a,b)->(b,c)->(c,d)->(d,e)
замкнутой цепочкой является цепочка, у которой 1 число 1 пары совпадает с последним числом последней пары, например:
(1,7)->(7,4)->(4,9)->(9,1)
каждый элемент можно использовать только однократно,
нужно создать цепочки так, чтобы покрыть ими как можно больше элементов
А это важно, какой цикл брать начальным? Можно искать все циклы и объединять касающиеся так, чтоб при каждом объединении происходило удлиннение. Впрочем, у меня нет полной уверенности, что таким способом всегда будет найден лучший вариант.