classSolution { private: int cnt; voidbacktrace(vector<vector<int> > &board, int row, int n) { if (row == n) { this->cnt++; return; } int i, j, k; for (j = 0; j < n; j++) { // column if (board[row][j] == 0) { for (i = row + 1; i < n; i++) { //set column of other row board[i][j] -= 1; } i = row + 1; k = j + 1; while (i < n && k < n) { board[i][k] -= 1; i++; k++; } i = row + 1; k = j - 1; while (i < n && k >= 0) { board[i][k] -= 1; i++; k--; }
board[row][j] = 1;
backtrace(board, row + 1, n);
i = row + 1; k = j + 1; while (i < n && k < n) { board[i][k] += 1; i++; k++; } i = row + 1; k = j - 1; while (i < n && k >= 0) { board[i][k] += 1; i++; k--; } for (i = row + 1; i < n; i++) { //set column of other row board[i][j] += 1; } board[row][j] = 0; } } }