#include <iostream>
#include <vector>
using namespace std;
int N, sum = 0;
bool check(int limit, vector<int> &rows) {
for (int i = 0; i < limit; i++) {
if (rows[i] == rows[limit] || abs(rows[i] - rows[limit]) == limit - i) {
return false;
}
}
return true;
}
void Nqueen(int row, vector<int> &rows) {
if (row == N) {
sum++;
return;
}
for (int i = 0; i < N; i++) {
rows[row] = i;
if (check(row,rows)) {
Nqueen(row + 1,rows);
}
}
}
int main() {
int T; cin >> T;
for (int t = 1; t <= T; t++) {
vector<int> rows(20, -1);
sum = 0;
cin >> N;
Nqueen(0,rows);
cout << "#" << t << " " << sum << endl;
}
return 0;
}
참고한 블로그 :
https://cryptosalamander.tistory.com/58
'전공공부 > 코딩테스트' 카테고리의 다른 글
(c++) 1209) Sum (0) | 2022.05.28 |
---|---|
(c++) SWEA "1215) 회문1" (0) | 2022.05.28 |
(c++) SWEA "1974) 스도쿠 검증" (0) | 2022.05.28 |
(c++) SWEA "2805) 농작물 수확" (0) | 2022.05.28 |
(c++) SWEA "2007) 패턴 마디의 길이" (0) | 2022.05.28 |