Ugrás a tartalomhoz

eight queens puzzle

A Wikiszótárból, a nyitott szótárból


Főnév

eight queens puzzle (tsz. eight queens puzzles)

  1. (informatika) nyolckirálynő-probléma

A Eight Queens Puzzle (magyarul: 8 királynő feladvány) a N Queens Problem speciális esete, ahol N = 8, azaz a feladat az, hogy 8 darab királynőt helyezzünk el egy 8×8-as sakktáblán úgy, hogy egyik se üssön a másikat.



🧩 Feladat pontos megfogalmazása

Cél: Olyan elrendezést találni, ahol:

  • Egy sorban legfeljebb egy királynő van,
  • Egy oszlopban legfeljebb egy királynő van,
  • Egy átlón (mindkét irányban) legfeljebb egy királynő van.



📐 Probléma reprezentáció

  • A sakktábla 8 sorból és 8 oszlopból áll.
  • Minden királynőt egyedi oszlopba helyezünk → elég azt tárolni, melyik sorban van a királynő minden oszlophoz.

Például a következő lista:

[0, 4, 7, 5, 2, 6, 1, 3]

azt jelenti, hogy:

  • az első oszlopban a királynő az 1. sorban van (0-indexelve),
  • a másodikban az 5. sorban,
  • … stb.



🧠 Megoldási módszer – Backtracking

A klasszikus megoldási technika a visszalépéses keresés (backtracking), ahol rekurzívan próbálunk elhelyezni királynőket soronként úgy, hogy az aktuális részmegoldás nem ütközik korábbi királynőkkel.



💻 Python példa

def is_safe(queens, row, col):
    for c in range(col):
        r = queens[c]
        if r == row or abs(r - row) == abs(c - col):
            return False
    return True

def solve_8_queens():
    def backtrack(col):
        if col == 8:
            solutions.append(queens[:])
            return
        for row in range(8):
            if is_safe(queens, row, col):
                queens[col] = row
                backtrack(col + 1)
    solutions = []
    queens = [-1] * 8
    backtrack(0)
    return solutions

solutions = solve_8_queens()
print(f"Total solutions: {len(solutions)}")

📊 Megoldások száma

  • Az összes lehetséges megoldás száma: 92.
  • Ha tükörképeket és elforgatásokat nem számolunk külön, akkor 12 alapmegoldás van.



♟️ Kirajzolás (szövegesen)

def print_board(sol):
    for row in sol:
        line = ['.'] * 8
        line[row] = 'Q'
        print(" ".join(line))
    print()

# Az első megoldás kirajzolása
print_board(solutions[0])

Példa kimenet:

Q . . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .

🧮 További módszerek

  • Constraint programming (pl. MiniZinc vagy Google OR-Tools)
  • Heurisztikus keresés (pl. Hill Climbing)
  • Genetikus algoritmus
  • Bitmasking technika (nagyon hatékony programozási trükk nagyobb N-re)



📌 Összefoglalás

Tulajdonság Érték
Tábla mérete 8 × 8
Királynők száma 8
Teljes megoldások 92
Egyedi (nem szimmetrikus) 12
Klasszikus megoldás Backtracking algoritmus
Használati terület Keresési algoritmusok, constraint programming, mesterséges intelligencia oktatása