#include #include using namespace std; int * * board; int size = 8; /* // This configuration didn't finish in over 24 hours int xmove[] = { 1, -1, 1, -1, 2, -2, 2, -2 }; int ymove[] = { 2, 2, -2, -2, 1, 1, -1, -1 }; */ // This configuration took 0.6 seconds int xmove[] = { 2, 1, -1, -2, -2, -1, 1, 2 }; int ymove[] = { 1, 2, 2, 1, -1, -2, -2, -1 }; bool solve(int r, int c, int n) { if (n == size * size) return true; if (board[r][c] != -1) return false; board[r][c] = n; for (int m = 0; m < 8; m += 1) { int nr = r + ymove[m], nc = c + xmove[m]; if (nr < 0 || nr >= size || nc < 0 || nc >= size) continue; bool ok = solve(nr, nc, n + 1); if (ok) return true; } board[r][c] = -1; return false; } int main(int argc, char * argv[]) { if (argc > 1) size = atoi(argv[1]); board = new int * [size]; for (int i = 0; i < size; i += 1) { board[i] = new int [size]; for (int j = 0; j < size; j += 1) board[i][j] = -1; } solve(0, 0, 0); for (int i = 0; i < size; i += 1) { for (int j = 0; j < size; j += 1) cout << setw(3) << board[i][j]; cout << "\n"; } }