00001
00016 bool Board::placeQueens(Queen *queenPtr)
00017 {
00018
00019 if (queenPtr->getCol() >= BOARD_SIZE)
00020 { delete queenPtr;
00021 return true;
00022 }
00023
00024 bool isQueenPlaced = false;
00025
00026 while (!isQueenPlaced && queenPtr->getRow() < BOARD_SIZE)
00027 {
00028
00029 if (queenPtr->isUnderAttack())
00030 queenPtr->nextRow();
00031
00032
00033 else
00034 { setQueen(queenPtr);
00035 Queen *newQueenPtr = new Queen(0, queenPtr->getCol() + 1);
00036 isQueenPlaced = placeQueens(newQueenPtr);
00037
00038
00039
00040
00041 if (!isQueenPlaced)
00042 { delete newQueenPtr;
00043 removeQueen();
00044 queenPtr->nextRow();
00045 }
00046 }
00047 }
00048 return isQueenPlaced;
00049 }