[BOJ] N-Queen
Date:
[BOJ] N-Queen
Problem URL : N-Queen
#include <string>
#include <vector>
using namespace std;
int answer;
bool check(int x, int y, vector<int> &col) {
for(int i = 0; i < x; i++) {
int rowDist = y - col[i];
if(rowDist < 0) {
rowDist *= -1;
}
if(y == col[i] || rowDist == x - i) {
return false;
}
}
return true;
}
void dfs(int x, int n, vector<int> &col) {
if(x == n) {
answer++;
return;
}
for(int row = 0; row < n; row++) {
if(check(x, row, col)) {
col[x] = row;
dfs(x + 1, n, col); // 매번 col[x] 값을 다르게 설정해주어서 탐색 [1]
}
}
}
int solution(int n) {
answer = 0;
vector<int> col(n);
dfs(0, n, col);
return answer;
}
Comments
백트래킹으로 유명한 N-Queen 문제이다.
[1]에서 어짜피 col[x] 값을 매번 새로 설정해주기 때문에
값을 복구해주는 백트래킹 부분이 생략되었다.
댓글