[백준 9663] N-Queen

silverCastle·2022년 1월 25일
0

https://www.acmicpc.net/problem/9663

✍️ 첫번째 접근

N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. 이 문제를 보니까 황규백 교수님의 인공지능 강의가 떠오르는데
어쨌든, 체스판 위에 퀸을 놓을 때 첫번째 행부터 놓게 된다고 가정하고 한 행씩 체스를 놓다가 마지막 행까지 놓을 수 있게 된다면 그게 N x N 체스판 위에 체스를 놓을 수 있는 경우이다.
이 과정에서 한 열에 체스가 서로 공격할 수 없어야 하고, 좌측에서 우측으로의 대각선, 우측에서 좌측으로의 대각선 모두 공격할 수 없게끔 조건을 만들었다.

#include <bits/stdc++.h>
using namespace std;
int n;
int cnt;
bool isused1[40];
bool isused2[40];
bool isused3[40];
void func(int cur) {
    if(cur == n) {
        ++cnt;
        return;
    }
    for(int i = 0; i < n; i++) {
        if(isused1[i] || isused2[i+cur] || isused3[cur-i+n-1])
            continue;
        isused1[i] = 1;
        isused2[i+cur] = 1;
        isused3[cur-i+n-1] = 1;
        func(cur+1);
        isused1[i] = 0;
        isused2[i+cur] = 0;
        isused3[cur-i+n-1] = 0;
    }
}
int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    func(0);
    cout << cnt;

    return 0;
}

0개의 댓글