N-Queen solution
안녕하세요 woo입니다. 오늘 처음으로 백준 문제풀이를 블로그에 공유하게 되었습니다.
전체코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
#define fastio ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int count=0;
int N;
vector<bool> rowAvailable;
map<int,bool> crossAvailable1;
map<int,bool> crossAvailable3;
void nqueenSolver(int col) {
if(col==N+1) { ::count+=1; return; }
for(int row=1;row<=N;row++) {
if(!rowAvailable[row] || !crossAvailable1[row+col] || !crossAvailable3[col-row]) continue;
crossAvailable1[row+col]=false;
crossAvailable3[col-row]=false;
rowAvailable[row]=false;
nqueenSolver(col+1);
crossAvailable1[row+col]=true;
crossAvailable3[col-row]=true;
rowAvailable[row]=true;
}
return;
}
int main() {
fastio;
cin >> N;
rowAvailable.assign(N + 1, true);
rowAvailable[0]=false;
for (int i = 2; i <= 2 * N; ++i) {
crossAvailable1[i] = true;
}
for (int i = -(N - 1); i <= N - 1; ++i) {
crossAvailable3[i] = true;
}
nqueenSolver(1);
cout << ::count << '\n';
return 0;
}