The eight queens problem

My program 8QUEENS.PRG included with SIM41.ZIP allows to find all positions for eight queens over a chessboard where nothing queen can capture another.

Example:

In order to describe each position I used a eight digits number where the first digit is the position of the first queen within the first chessboard column, the second digit is the position of the second queen within the second column, and so on until the eight column.

The preceding position, for example, is 15863724.

The one in the first digit means that the queen of the first column is positioned over the first row , the five in the second digit means that the queen of the second column is positioned over the fifth row counting from up to down. The eight in the third digit means that the third queen is positioned over the eight row, and so on until the eight digit.

The program can begins the search from a partial initial position. For Example: 135

If you don't give this data , the program begins puting the first queen over the first upper row of the first column. The other queens are out of the board at the beginning and enter to the board from left to right, each queen searching in her assigned column a row where can not capture to the preceding queens.

If is not possible to put a queen over a row in her assigned column, the queen does not enter to the board and the program moves the queen in the preceding left column to the following row down where the preceding queen will can not capture the other queens at her left and again the program try to put a queen in the current column.

If it's successfull the program try to put a new queen in the following right column. If the program reachs the eight column and achieves to put a queen in that column , the position is shown on the calculator display.

Example: Search positions from partial initial position = 158

1) Execute sim41.exe

Calculator Keyboard      PC Keyboard                     Display
-------------------      -----------                     -------

[XEQ]8QUEENS             [K]8QUEENS[PC_ENTER_KEY]        XEQ 8QUEENS
                                                         PUBLISH?
YES[R/S]                 YES[!]  (Run in Alpha mode is !)
                                                         INITIAL POSITION?
158[R/S]                 158[R]  (Run in normal mode is R)

  .....Wait a few seconds while the calculator searchs for the position.....

                                                         CODES:11432133
(My own codes for catalog the position's point of view.
I will explain it later)

[R/S]                    [R]
                                                         POSITION1=15863724
[R/S]                    [R]        
                                                         ROTATION?
NO[R/S]                  NO[!]
(The position can be viewed from several view points if you answer YES.
I will explain it later)

...... Wait a few seconds while the calculator searchs for a new position ...

                                                         CODES:11432133
(The same point of view for a different position)

[R/S]                    [R]
                                                         POSITION2=16837425
[R/S]                    [R] 
                                                         ROTATION?
NO[R/S]                  NO[!]

...... Wait a few seconds while the calculator searchs for a new position ...


                                                         CODES:11432133
[R/S]                    [R]
                                                         POSITION3=17468253
[R/S]                    [R] 
                                                         ROTATION?
NO[R/S]                  NO[!]

...... Wait a few seconds while the calculator searchs for a new position ...

and so on.

Each position can be seen from four viewpoints: From the chessboard left side, right side, from up side or from down side. I assume that the default side for view and annotate the position is from downside.

For example, the position 15863724 can be viewed and annotated in the following manner:

In the chessboard there are several simmetry axis:

You can use translations around the horizontal and vertical simmetry axis for generate new positions from someone position. Also you can apply double translations: first around the vertical axis and later around the horizontal axis.

The double translation first around the vertical axis and later around the horizontal axis is equivalent to the double translation first around the horizontal axis and later around the vertical axis.

Then, each chessboard position generates four positions depending the viewpoint, other four positions if we make a translation around the horizontal axis, other four positions if we make a translation around the vertical axis and other four positions if we use a double translation.

Example: The initial position 15863724 generates the following positions:

Without rotations: 15863724, 36428571, 57263148, 82417536
With a rotation around the horizontal axis: 84136275, 17582463, 42736851, 63571428
With a rotation around the vertical axis: 42736851, 63571428, 84136275,17582463
With double rotation around both axis: 57263148, 82417536, 15863724, 36428571

Note: I am assigning equal meaning to the words translation and rotation.

Theoretically each position generates sixteen positions but if you look at the positions generated, each position is repeated two times. Then , each position only produces eight positions: The original position and other seven new positions.

One exception: There is one position with complete simmetry with reference to the central point of the chessboard. This position only generates three new positions. Try to find it using the program.

It's possible to find 92 different positions in a 8x8 chessboard

There are 11 independent positions that generate seven new positions and one independent position that generates only three new positions. (11*8+1*4 = 92 )

If you answer YES to the question ROTATION? in the program, the seven new positions associated with the current position are shown.

I assigned the code 11 to the original position viewed from downside, code 12 to the original position viewed from right side, code 13 to the original position viewed from up side and code 14 to the original position viewed from leftside.

The code 21 is the original position rotated around the horizontal axis and viewed from downside, 22 is the same position viewed from right side, 23 is the position viewed from upside and 24 means viewed from left side.

Code 31 means the original position rotated around the vertical axis and viewed from downside, codes 32, 33 and 34 mean this position viewed from leftside, upside and rightside respectively.

Codes 41, 42 , 43 and 44 mean the original position rotated around both axis and viewed from downside, leftside, upside and rightside respectively.

If you wish to find all positions it's enough that the queen in the first column will be put in the range from file 1 to file 4 because the positions obtained with the first queen in files 5 to 8 can be reached with a rotation around the horizontal axis.

The 8QUEENS program obtained 46 positions with the first queen varying from file 1 to file 4.

I named the "Associated position" to the position generated by rotating the original obtained position around the horizontal axis. The 8QUEENS program shows codes as four pairs of two digits numbers. The first two pairs correspond to two viewpoints in the original position and the last two pairs correspond to two viewpoints in the associated position.

Example: For the position: 15863724, CODES=11432133 mean that the original position can be viewed from viewpoint 11 and viewpoint 43 and the associated position 84136275 generates 15863724 from viewpoint 21 and viewpoint 33.

Return to main page