백준 9663번 c++ : N-Queen

Rena·2022년 12월 7일
0

알고리즘 문제풀이

목록 보기
30/45
#include <bits/stdc++.h>
using namespace std;

int n, cnt;
bool isused1[30], isused2[30], isused3[30];

void func(int cur) {
    if(cur==n) {
        cnt++;
        return;
    }
    for(int i=0; i<n; i++) {
        if(isused1[i] || isused2[cur+i] || isused3[cur-i+n-1]) {
            continue;
        }
        isused1[i] = true;
        isused2[cur+i] = true;
        isused3[cur-i+n-1] = true;
        func(cur+1);
        isused1[i] = false;
        isused2[cur+i] = false;
        isused3[cur-i+n-1] = false;
    }
}

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    func(0);
    cout << cnt;
}

한 줄에 하나만 놓을 수 있다.
1. y축 중복 확인
2. 왼쪽 아래 -> 오른쪽 위 대각선 방향 확인
3. 왼쪽 위 -> 오른쪽 아래 대각선 방향 확인

profile
일을 사랑하고 싶은 개발자

0개의 댓글