Oppgave 2
Vi finner svaret ved prøving og feiling: Hvis vi setter en dronning i rute (0,0), er eneste mulighet i neste rad en dronning i rute (1,2). Men da er det ingen muligheter i den nederste raden. Starter vi isteden med en dronning i rute (0,1), er det ingen muligheter i neste rad. Heller ikke en dronning i rute (0,2) gir noen muligheter.
Oppgave 3
Rutene (0,1), (1,3), (2,0) og (3,2) som svarer til permutasjonen 1, 3, 0, 2 er en lovlig oppstilling. Det samme gjelder rutene (0,2), (1,0), (2,3) og (3,1) som svarer til permutasjonen 2, 0, 3, 1.
Oppgave 4
1, 3, 0, 2, 4, 5 er ulovlig. Dronning i både (4,4) og (4,5) går ikke.
1, 3, 5, 0, 2, 4 er lovlig.
3, 0, 4, 1, 5, 2 er lovlig.
Oppgave 5
1, 3, 0, 6, 4, 2, 5, 7 er ulovlig. Dronning i både (4,4) og (7,7) går ikke.
2, 0, 6, 4, 7, 1, 3, 5 er lovlig.
3, 0, 2, 5, 1, 6, 4, 7 er ulovlig. Dronning i både (2,2) og (7,7) går ikke.
5, 7, 1, 3, 0, 6, 4, 2 er lovlig.
Oppgave 6
Det burde bli en nær halvering av tidsforbruket.
Oppgave 7
public static int[] førsteLovlige(int n) { int[] p = new int[n]; for (int i = 0; i < n; i++) p[i] = i; do { if (lovligOppstilling(p) == 0) return p; } while (Tabell.nestePermutasjon(p)); return null; }
4: [1, 3, 0, 2] 5: [0, 2, 4, 1, 3] 6: [1, 3, 5, 0, 2, 4] 7: [0, 2, 4, 6, 1, 3, 5] 8: [0, 4, 7, 5, 2, 6, 1, 3] 9: [0, 2, 5, 7, 1, 3, 8, 6, 4] 10: [0, 2, 5, 7, 9, 4, 8, 1, 3, 6] 11: [0, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9] 12: [0, 2, 4, 7, 9, 11, 5, 10, 1, 6, 8, 3] 13: [0, 2, 4, 1, 8, 11, 9, 12, 3, 5, 7, 10, 6] 14: [0, 2, 4, 6, 11, 9, 12, 3, 13, 8, 1, 5, 7, 10]
Oppgave 8
int[] p = {0, 2, 4, 1, 3}; System.out.println(Arrays.toString(Dronning.rotasjon90(p.clone()))); System.out.println(Arrays.toString(Dronning.rotasjon180(p.clone()))); System.out.println(Arrays.toString(Dronning.rotasjon270(p.clone()))); System.out.println(Arrays.toString(Dronning.diagonal(p.clone()))); System.out.println(Arrays.toString(Dronning.bidiagonal(p.clone()))); System.out.println(Arrays.toString(Dronning.vertikal(p.clone()))); System.out.println(Arrays.toString(Dronning.horisontal(p.clone())));
[4, 1, 3, 0, 2] [1, 3, 0, 2, 4] [2, 4, 1, 3, 0] [0, 3, 1, 4, 2] [2, 0, 3, 1, 4] [4, 2, 0, 3, 1] [3, 1, 4, 2, 0]
Med p = 1, 4, 2, 0, 3 blir det:
[1, 4, 2, 0, 3] [1, 4, 2, 0, 3] [1, 4, 2, 0, 3] [3, 0, 2, 4, 1] [3, 0, 2, 4, 1] [3, 0, 2, 4, 1] [3, 0, 2, 4, 1]
Oppgave 9
Oppgave 10
[3, 5, 7, 1, 6, 0, 2, 4] [2, 4, 1, 7, 0, 6, 3, 5] [3, 5, 7, 1, 6, 0, 2, 4] [4, 2, 0, 6, 1, 7, 5, 3] [4, 2, 0, 6, 1, 7, 5, 3] [5, 3, 6, 0, 7, 1, 4, 2] [5, 3, 6, 0, 7, 1, 4, 2]
Oppgave 12
public static void main(String... args) { int[] p = {0,1,2,3,4,5,6,7}; do { int r = Dronning.lovligOppstilling(p); if (r == 0) { if (Dronning.førstLeksikografisk(p)) System.out.println(Arrays.toString(p)); } else Tabell.snu(p,r + 1); } while (Tabell.nestePermutasjon(p)); }
[0, 4, 7, 5, 2, 6, 1, 3] [0, 5, 7, 2, 6, 3, 1, 4] [1, 3, 5, 7, 2, 0, 6, 4] [1, 4, 6, 0, 2, 7, 5, 3] [1, 4, 6, 3, 0, 7, 5, 2] [1, 5, 0, 6, 3, 7, 2, 4] [1, 5, 7, 2, 0, 3, 6, 4] [1, 6, 2, 5, 7, 4, 0, 3] [1, 6, 4, 7, 0, 3, 5, 2] [2, 4, 1, 7, 0, 6, 3, 5] [2, 4, 7, 3, 0, 6, 1, 5] [2, 5, 1, 4, 7, 0, 6, 3]