1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
int solveBoard(Board board, int row, int col, int& solutionNum, int currentMoveNum = 1) {
//Boundary Check
if (row<0 || row>BOARD_SIZE - 1 || col<0 || col>BOARD_SIZE - 1) return 0;
//End of Board Check
if (currentMoveNum == BOARD_SIZE*BOARD_SIZE + 1) {
++solutionNum;
printBoard(board, solutionNum);
return 1;
}
//Set Knight at Current Space (if possible)
if (board.boardArray[row][col] == 0) board.boardArray[row][col] = currentMoveNum;
else return 0;
//MOVEMENT
//DOWN
//Down 2 right 1
solveBoard(board, row + 2, col + 1, solutionNum, currentMoveNum + 1);
//Down 2 left 1
solveBoard(board, row + 2, col - 1, solutionNum, currentMoveNum + 1);
//Down 1 right 2
solveBoard(board, row + 1, col + 2, solutionNum, currentMoveNum + 1);
//Down 1 left 2
solveBoard(board, row + 1, col - 2, solutionNum, currentMoveNum + 1);
//UP
//Up 2 right 1
solveBoard(board, row - 2, col + 1, solutionNum, currentMoveNum + 1);
//Up 2 left 1
solveBoard(board, row - 2, col - 1, solutionNum, currentMoveNum + 1);
//Up 1 right 2
solveBoard(board, row - 1, col + 2, solutionNum, currentMoveNum + 1);
//Up 1 left 2
solveBoard(board, row - 1, col - 2, solutionNum, currentMoveNum + 1);
//Return amount of solutions if algorithm is complete
if (currentMoveNum == 1) return solutionNum;
}
|