Generated on Thu Mar 22 10:39:51 2012 for Gecode by doxygen 1.6.3

CrowdedChess Class Reference
[Example scripts (models)]

Example: Crowded chessboard More...

List of all members.

Public Types

enum  { PROP_TUPLE_SET, PROP_DECOMPOSE }

Public Member Functions

 CrowdedChess (const SizeOptions &opt)
 The model of the problem.
 CrowdedChess (bool share, CrowdedChess &e)
 Constructor for cloning e.
virtual Spacecopy (bool share)
 Copy during cloning.
virtual void print (std::ostream &os) const
 Print solution.

Protected Types

enum  {
  Q, R, B, K,
  E, PMAX
}

Protected Member Functions

bool valid_pos (int i, int j)
void knight_constraints (void)
 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

Related Functions

(Note that these are not member functions.)



TupleSet bishops
 Set of valid positions for the bishops.
void init_bishops (int size)
 Initialize bishops.

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 $n$, where the number of pieces to place are:

  • $ n $ queens
  • $ n $ rooks
  • $ 2n-1 $ bishops
  • $ k $ knights where k is a number to maximize.

The maximum k for some different values of $ n $ 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:

QBK. KBKR
.K.K QKRB
B.KR K.KQ
BKRK .Q.B
BRQ. K.KB
RK.K .KQB
BQK. KRK.
BKBQ RKBB

Definition at line 187 of file crowded-chess.cpp.


Member Enumeration Documentation

anonymous enum [protected]

Symbolic names of pieces. The order determines which piece will be placed first.

Enumerator:
Q 

Queen.

R 

Rook.

B 

Bishop.

K 

Knight.

E 

Empty square.

PMAX 

Number of pieces (including empty squares).

Definition at line 198 of file crowded-chess.cpp.

anonymous enum
Enumerator:
PROP_TUPLE_SET 

Propagate bishops placement extensionally.

PROP_DECOMPOSE 

Propagate bishops placement with decomposition.

Definition at line 232 of file crowded-chess.cpp.


Constructor & Destructor Documentation

CrowdedChess::CrowdedChess ( const SizeOptions opt  )  [inline]

The model of the problem.

Definition at line 238 of file crowded-chess.cpp.

CrowdedChess::CrowdedChess ( bool  share,
CrowdedChess e 
) [inline]

Constructor for cloning e.

Definition at line 344 of file crowded-chess.cpp.


Member Function Documentation

bool CrowdedChess::valid_pos ( int  i,
int  j 
) [inline, protected]

Definition at line 208 of file crowded-chess.cpp.

void CrowdedChess::knight_constraints ( void   )  [inline, protected]

Post knight-constraints.

Definition at line 214 of file crowded-chess.cpp.

virtual Space* CrowdedChess::copy ( bool  share  )  [inline, virtual]

Copy during cloning.

Definition at line 354 of file crowded-chess.cpp.

virtual void CrowdedChess::print ( std::ostream &  os  )  const [inline, virtual]

Print solution.

Reimplemented from Gecode::Driver::ScriptBase< BaseSpace >.

Definition at line 360 of file crowded-chess.cpp.


Friends And Related Function Documentation

TupleSet bishops [related]

Set of valid positions for the bishops.

Definition at line 61 of file crowded-chess.cpp.

void init_bishops ( int  size  )  [related]

Initialize bishops.

Definition at line 108 of file crowded-chess.cpp.


Member Data Documentation

const int CrowdedChess::n [protected]

Board-size.

Definition at line 189 of file crowded-chess.cpp.

The board.

Definition at line 190 of file crowded-chess.cpp.

Row of queen in column x.

Definition at line 191 of file crowded-chess.cpp.

Row of rook in column x.

Definition at line 191 of file crowded-chess.cpp.

True iff the corresponding place has a knight.

Definition at line 193 of file crowded-chess.cpp.

enum { ... } CrowdedChess::piece [protected]

Symbolic names of pieces. The order determines which piece will be placed first.


The documentation for this class was generated from the following file: