CrowdedChess Class Reference
[Example scripts (models)]
Inherits Example.
Detailed Description
Example: Crowded Chessboard"You are given a chessboard together with 8 queens, 8 rooks, 14 bishops, and 21 knights. The puzzle is to arrange the 51 pieces on the chessboard so that no queen shall attack another queen, no rook attack another rook, no bishop attack another bishop, and no knight attack another knight. No notice is to be taken of the intervention of pieces of another type from that under consideration - that is, two queens will be considered to attack one another although there may be, say, a rook, a bishop, and a knight between them. It is not difficult to dispose of each type of piece separately; the difficulty comes in when you have to find room for all the arrangements on the board simultaneously." Dudeney, H.E., (1917), Amusements in Mathematics, Thomas Nelson and Sons.
This puzzle can be generalized to chess-boards of size , where the number of pieces to place are:
queens
rooks
bishops
knights where k is a number to maximize.
The maximum k for some different values of are presented below (from Jesper Hansen and Joachim Schimpf, ECLiPSe solution
n | k |
8 | 21 |
9 | 29 |
10 | 37 |
11 | 47 |
12 | 57 |
13 | 69 |
14 | 81 |
15 | 94 |
16 | 109 |
A solution for n = 8 is:
Q | B | K | . | K | B | K | R |
. | K | . | K | Q | K | R | B |
B | . | K | R | K | . | K | Q |
B | K | R | K | . | Q | . | B |
B | R | Q | . | K | . | K | B |
R | K | . | K | . | K | Q | B |
B | Q | K | . | K | R | K | . |
B | K | B | Q | R | K | B | B |
- Todo:
- Currently this script finds a solution. Instead, it should find the maximum number of knights for a given size.
Definition at line 103 of file crowded-chess.cc.
Public Member Functions | |
CrowdedChess (const Options &o) | |
The model of the problem. | |
CrowdedChess (bool share, CrowdedChess &e) | |
Constructor for cloning e. | |
virtual Space * | copy (bool share) |
Copy during cloning. | |
virtual void | print (void) |
Print solution. | |
Protected Types | |
enum | { Q, R, B, K, E, PMAX } |
Protected Member Functions | |
bool | valid_pos (int i, int j) |
void | knight_constraints () |
Post knight-constraints. | |
Protected Attributes | |
const int | n |
Board-size. | |
IntVarArray | s |
The board. | |
IntVarArray | queens |
Row of queen in column x. | |
IntVarArray | rooks |
Row of rook in column x. | |
BoolVarArray | knights |
True iff the corresponding place has a knight. | |
enum CrowdedChess:: { ... } | piece |
Member Enumeration Documentation
|
Symbolic names of pieces. The order determines which piece will be placed first.
Definition at line 114 of file crowded-chess.cc. |
Constructor & Destructor Documentation
|
The model of the problem.
Definition at line 149 of file crowded-chess.cc. |
|
Constructor for cloning e.
Definition at line 250 of file crowded-chess.cc. |
Member Function Documentation
|
Definition at line 124 of file crowded-chess.cc. |
|
Post knight-constraints.
Definition at line 130 of file crowded-chess.cc. |
|
Copy during cloning.
Implements Gecode::Space. Definition at line 260 of file crowded-chess.cc. |
|
Print solution.
Reimplemented from Example. Definition at line 266 of file crowded-chess.cc. |
Member Data Documentation
|
Board-size.
Definition at line 105 of file crowded-chess.cc. |
|
The board.
Definition at line 106 of file crowded-chess.cc. |
|
Row of queen in column x.
Definition at line 107 of file crowded-chess.cc. |
|
Row of rook in column x.
Definition at line 107 of file crowded-chess.cc. |
|
True iff the corresponding place has a knight.
Definition at line 109 of file crowded-chess.cc. |
|
Symbolic names of pieces. The order determines which piece will be placed first. |
The documentation for this class was generated from the following file:
- examples/crowded-chess.cc (Revision: 3517)