Учитывая ориентированный граф, выведите самый длинный цикл.
правила
- Разрешен любой разумный формат ввода (например, список ребер, матрица связности).
- Метки не важны, поэтому вы можете наложить любые ограничения на метки, которые вам нужны и / или желательны, если они не содержат дополнительную информацию, не указанную во входных данных (например, вы не можете требовать, чтобы узлы в циклах были помечены целыми числами, а другие узлы помечены буквенными строками).
- Цикл - это последовательность узлов, которые все связаны, и ни один узел не повторяется, кроме узла, который является началом и концом цикла (
[1, 2, 3, 1]
это цикл, но[1, 2, 3, 2, 1]
это не так). - Если график является ациклическим, самый длинный цикл имеет длину 0 и, следовательно, должен давать пустой вывод (например, пустой список, вообще не выводить).
- Повторять первый узел в конце списка узлов в цикле необязательно (
[1, 2, 3, 1]
и[1, 2, 3]
обозначать тот же цикл). - Если есть несколько циклов одинаковой длины, любой или все из них могут быть выведены.
- Встроенные функции разрешены, но если ваше решение использует их, рекомендуется включить альтернативное решение, которое не использует тривиализируемые встроенные функции (например, встроенное, которое выводит все циклы). Тем не менее, альтернативное решение не будет учитываться при подсчете очков, поэтому оно не является обязательным.
Тестовые случаи
В этих тестовых случаях входные данные задаются в виде списка ребер (где первый элемент является узлом источника, а второй элемент является узлом назначения), а выходные данные представляют собой список узлов без повторения первого / последнего узла.
[(0, 0), (0, 1)] -> [0]
[(0, 1), (1, 2)] -> []
[(0, 1), (1, 0)] -> [0, 1]
[(0, 1), (1, 2), (1, 3), (2, 4), (4, 5), (5, 1)] -> [1, 2, 4, 5]
[(0, 1), (0, 2), (1, 3), (2, 4), (3, 0), (4, 6), (6, 8), (8, 0)] -> [0, 2, 4, 6, 8]
[(0, 0), (0, 8), (0, 2), (0, 3), (0, 9), (1, 0), (1, 1), (1, 6), (1, 7), (1, 8), (1, 9), (2, 1), (2, 3), (2, 4), (2, 5), (3, 8), (3, 1), (3, 6), (3, 7), (4, 1), (4, 3), (4, 4), (4, 5), (4, 6), (4, 8), (5, 0), (5, 8), (5, 4), (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 9), (7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 8), (7, 9), (8, 0), (8, 1), (8, 2), (8, 5), (8, 9), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6)] -> [0, 9, 6, 7, 8, 2, 5, 4, 3, 1]
[(0, 0), (0, 2), (0, 4), (0, 5), (0, 7), (0, 9), (0, 11), (1, 2), (1, 4), (1, 5), (1, 8), (1, 9), (1, 10), (2, 0), (2, 1), (2, 3), (2, 4), (2, 5), (2, 6), (3, 0), (3, 1), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (3, 11), (4, 1), (4, 3), (4, 7), (4, 8), (4, 9), (4, 10), (4, 11), (5, 0), (5, 4), (5, 6), (5, 7), (5, 8), (5, 11), (6, 0), (6, 8), (6, 10), (6, 3), (6, 9), (7, 8), (7, 9), (7, 2), (7, 4), (7, 5), (8, 8), (8, 9), (8, 2), (8, 4), (8, 7), (9, 0), (9, 1), (9, 2), (9, 3), (9, 6), (9, 10), (9, 11), (10, 8), (10, 3), (10, 5), (10, 6), (11, 2), (11, 4), (11, 5), (11, 9), (11, 10), (11, 11)] -> [0, 11, 10, 6, 9, 3, 8, 7, 5, 4, 1, 2]