Løsningsforslag - oppgaver i Avsnitt 1.3.15


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]