Étant donné un graphique dirigé, affichez le cycle le plus long.
Règles
- Tout format d'entrée raisonnable est autorisé (par exemple, liste des bords, matrice de connectivité).
- Les étiquettes ne sont pas importantes, vous pouvez donc imposer des restrictions sur les étiquettes dont vous avez besoin et / ou que vous désirez, tant qu'elles ne contiennent pas d'informations supplémentaires non fournies dans l'entrée (par exemple, vous ne pouvez pas exiger que les nœuds dans les cycles soient étiquetés avec des entiers, et les autres nœuds sont étiquetés avec des chaînes alphabétiques).
- Un cycle est une séquence de nœuds qui sont tous connectés, et aucun nœud n'est répété, à l'exception du nœud qui est le début et la fin du cycle (
[1, 2, 3, 1]
est un cycle, mais[1, 2, 3, 2, 1]
ne l'est pas). - Si le graphique est acyclique, le cycle le plus long a une longueur de 0 et devrait donc produire une sortie vide (par exemple une liste vide, pas de sortie du tout).
- La répétition du premier nœud à la fin de la liste des nœuds du cycle est facultative (
[1, 2, 3, 1]
et[1, 2, 3]
dénote le même cycle). - S'il existe plusieurs cycles de la même longueur, l'un d'entre eux ou tous peuvent être sortis.
- Les prédéfinitions sont autorisées, mais si votre solution en utilise une, vous êtes encouragé à inclure une solution alternative qui n'utilise pas de prédéfinitions banalisantes (par exemple une prédéfinie qui génère tous les cycles). Cependant, la solution alternative ne comptera pas du tout dans votre score, elle est donc entièrement facultative.
Cas de test
Dans ces cas de test, l'entrée est donnée sous la forme d'une liste d'arêtes (où le premier élément est le nœud source et le deuxième élément est le nœud de destination), et la sortie est une liste de nœuds sans répétition du premier / dernier nœud.
[(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]