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
| class Solution { public: int totalNQueens(int n) { unordered_set<int> columns, diagonals1, diagonals2; return backtrack(n, 0, columns, diagonals1, diagonals2); }
int backtrack(int n, int row, unordered_set<int>& columns, unordered_set<int>& diagonals1, unordered_set<int>& diagonals2) { if (row == n) return 1; else { int count = 0; for (int i = 0; i < n; i++) { if (columns.find(i) != columns.end()) continue; int diagonal1 = row - i; if (diagonals1.find(diagonal1) != diagonals1.end()) continue; int diagonal2 = row + i; if (diagonals2.find(diagonal2) != diagonals2.end()) continue; columns.insert(i); diagonals1.insert(diagonal1); diagonals2.insert(diagonal2); count += backtrack(n, row + 1, columns, diagonals1, diagonals2); columns.erase(i); diagonals1.erase(diagonal1); diagonals2.erase(diagonal2); } return count; } } };
|