#include #include using namespace std; template vector > permutations(vector L) { int i, j, k; vector > ans; if (L.size() <= 1) { ans.push_back(vector(L)); } else { for (i = 0; i < (int) L.size(); i++) { vector sub; for (j = 0; j < (int) L.size(); j++) { if (j != i) { sub.push_back(L[j]); } } vector > p = permutations(sub); for (j = 0; j < (int) p.size(); j++) { vector temp; temp.push_back(L[i]); for (k = 0; k < (int) p[j].size(); k++) { temp.push_back(p[j][k]); } ans.push_back(temp); } } } return ans; } vector > queens(int n) { int i, j; vector > ans; vector L; for (i = 0; i < n; i++) { L.push_back(i); } vector > p = permutations(L); for (i = 0; i < (int) p.size(); i++) { set main_diag, skew_diag; for (j = 0; j < n; j++) { main_diag.insert(j+p[i][j]); skew_diag.insert(j-p[i][j]); } if (main_diag.size() == n && skew_diag.size() == n) { ans.push_back(p[i]); } } return ans; } int main() { int j; vector > q = queens(8); for (int i = 0; i < (int) q.size(); i++) { for (int col = 0; col < (int) q[i].size(); col++) { for (j = 0; j < q[i][col]; j++) { printf("."); } printf("Q"); for (j = q[i][col] + 1; j < 8; j++) { printf("."); } printf("\n"); } printf("\n"); } return 0; }