给定有向图,输出最长的周期。
规则
- 允许使用任何合理的输入格式(例如,边列表,连接矩阵)。
- 标签并不重要,因此您可以对需要和/或期望的标签施加任何限制,只要它们不包含输入中未提供的其他信息即可(例如,您不能要求循环中的节点为标有整数,其他节点标有字母字符串)。
- 循环是指所有连接的节点序列,除了作为循环开始和结束的节点(
[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]