Saturday 21 May 2011

8 queens puzzle

The eight queens puzzle is the problem of placing eight chess queens on an 8×8 chessboard so that no two queens attack each other. Thus, a solution requires that no two queens share the same row, column, or diagonal. The eight queens puzzle is an example of the more general n-queens problem of placing n queens on an n×n chessboard, where solutions exist for all n other than 2 and 3
Solid white.svg
The problem can be quite computationally expensive as there are 4,426,165,368 (i.e., 64 choose 8) possible arrangements of eight queens on a 8×8 board, but only 92 solutions. It is possible to use shortcuts that reduce computational requirements or rules of thumb that avoids brute force computational techniques. For example, just by applying a simple rule that constrains each queen to a single column (or row), though still considered brute force, it is possible to reduce the number of possibilities to just 16,777,216 (that is, 88) possible combinations. Generating the permutations that are solutions of the eight rooks puzzle[2] and then checking for diagonal attacks further reduces the possibilities to just 40,320 (that is, 8!). These are computationally manageable for n = 8, but would be intractable for problems of n ≥ 20, as 20! = 2.433 * 1018. Advancements for this and other toy problems are the development and application of heuristics (rules of thumb) that yield solutions to the nqueens puzzle at a small fraction of the computational requirements.
This heuristic solves N queens for any N ≥ 4. It forms the list of numbers for vertical positions (rows) of queens with horizontal position (column) simply increasing. N is 8 for eight queens puzzle.
  1. If the remainder from dividing N by 6 is not 2 or 3 then the list is simply all even numbers followed by all odd numbers ≤ N
  2. Otherwise, write separate lists of even and odd numbers (i.e. 2,4,6,8 - 1,3,5,7)
  3. If the remainder is 2, swap 1 and 3 in odd list and move 5 to the end (i.e. 3,1,7,5)
  4. If the remainder is 3, move 2 to the end of even list and 1,3 to the end of odd list (i.e. 4,6,8,2 - 5,7,9,1,3)
  5. Append odd list to the even list and place queens in the rows given by these numbers, from left to right (i.e. a2, b4, c6, d8, e3, f1, g7, h5)
For N = 8 this results in the solution shown above.


    abcdefghSolid white.svg
    8{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} white queen{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __8
    7{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} white queen{{{square}}} __7
    6{{{square}}} __{{{square}}} __{{{square}}} white queen{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __6
    5{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} white queen5
    4{{{square}}} __{{{square}}} white queen{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __4
    3{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} white queen{{{square}}} __{{{square}}} __{{{square}}} __3
    2{{{square}}} white queen{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __2
    1{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} __{{{square}}} white queen{{{square}}} __{{{square}}} __1
    Solid white.svgabcdefghSolid white.svg
    One solution.

    1 comment: