Haskell — Permutacions unicícliques

Feu una funció unicycles :: Int -> [[Int]] que, donat un nombre n>0n>0, retorni totes les permutacions de [1..n][1..n] amb un cicle exactament. Suposeu que el contingut de la posició ii d’una permutació indica “la següent posició que cal visitar”.

Per exemple, considereu la permutació (4,3,2,5,1,7,6)(4,3,2,5,1,7,6). A la posició 1 hi ha un 4, a la posició 4 hi ha un 5, i a la posició 5 hi ha un 1. Així doncs, un dels cicles d’aquesta permutació és 1→4→5→11 \to 4 \to 5 \to 1. Els altres dos cicles són 2→3→22 \to 3 \to 2 i 6→7→66 \to 7 \to 6. La permutació (3,2,1)(3,2,1) té els dos cicles 1→3→11 \to 3 \to 1 i 2→22 \to 2, mentre que la permutació (3,4,5,6,7,1,2)(3,4,5,6,7,1,2) només té el cicle 1→3→5→7→2→4→6→11 \to 3 \to 5 \to 7 \to 2 \to 4 \to 6 \to 1.

Pista

Hi ha (n−1)!(n-1)! permutacions unicícliques de nn elements.

Observació

Per tal que no importi l’ordre en que genereu la solució, els jocs de proves ordenen el resultat. Per a això, importeu la funció sort del mòdul Data.List encara que no la feu servir.

Informació del problema

Autoria: Jordi Petit

Generació: 2026-02-03T17:07:07.333Z

© Jutge.org, 2006–2026.
https://jutge.org