Давши спрямований графік, виведіть найдовший цикл.
Правила
- Дозволений будь-який розумний формат введення (наприклад, список ребер, матриця підключення).
- Мітки не важливі, тому ви можете накладати будь-які обмеження на потрібні та / або бажані мітки, якщо вони не містять додаткової інформації, не вказаної у вводі (наприклад, ви не можете вимагати, щоб вузли в циклах були позначені цілими числами, а інші вузли позначені алфавітними рядками).
- Цикл - це послідовність вузлів, які пов'язані між собою, і жоден вузол не повторюється, крім вузла, який є початком і кінцем циклу (
[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]