|
The original eight queens problem consisted of trying to find a way to place eight queens on a chessboard so that no queen would attack any other queen. An alternate way of expressing the problem is to place eight anythings on an eight by eight grid such that none of them share a common row, column, or diagonal.
It has long been known that there are 92 solutions to the problem. Of these 92, there are 12 distinct patterns. All of the 92 solutions can be transformed into one of these 12 unique patterns using rotations and reflections.
If the size of the chessboard is increased beyond 8 rows/columns, researchers might want to find how many solutions exist for any arbitrary board size N. For example, if N = 10, then there are 724 solutions. Of these, 92 are distinct.
To date, it's known that for N = 25 there are 2,207,893,435,808,352 solutions. This result was obtained by two different sources:
- from the Objectweb ProActive INRIA Team, June 11, 2005, communicated by Alexandre Di Costanzo. This calculation took about 53 years of CPU time.
- been confirmed by the NTU 25Queen Project at the National Taiwan University and Ming Chuan University, led by Yuh-Pyng (Arping) Shieh, July 26, 2005. This computation took 26613 days of CPU time.
In the N Queen problem the number of solutions and the time taken to solve the whole problem increases in order of n!. So doing it on a single ordinary PC it's a marathonic problem after N=19.
But, due the nature of the problem, it's a perfect candidate for parallelization. That's done by placing Queens in all different positions of the first Col/Row of the board, and then solve the results problems. The solution of the original problem is the sum of all solutions of the subproblems.
For each board, the project sends jobs for the first n/2 positions of the first Queen, then the number of solutions must be doubled to get the real solution of the problem. In odd n boards the process is similar, compute (n-1)/2 and for the (n+1)/2 position, the second queen is placed only in the first half of the board.
Currently, the code running in the project is based on the Jeff Somers Code, modified to work with subboards, checkpoint, and the BOINC framework. |