BOJ 9663 c++

Algorithm / / 2020. 7. 14. 22:25

알고리즘

BOJ 9663 Nqueen c++

백준 9663 Nqueen c++


#include <bits/stdc++.h>
using namespace std;

int n;
int answer = 0;
int isusedCol[40]; // 열이 쓰였는지.
int isusedUpRight[40]; // 우상향 대각선이 쓰였는지.
int isusedDownRight[40]; // 우하향 대각선이 쓰였는지.

void nqueen(int cur) {
    if (cur == n) {
        answer++;
        return ;
    }
    for (int i = 0; i < n; i++) {
        //i는 인덱스이자 행값. cur은 열값.
        //x+y가 같으면 대각선상에 있는 좌표임. x-y도 마찬가지.
        //n-1을 isusedDownRight에 붙여주는 이유는 0 밑으로 가는 걸 방지하기 위해.
        if (isusedCol[i] || isusedUpRight[i + cur] || isusedDownRight[cur - i + n - 1])
            continue ;
        isusedCol[i] = 1;
        isusedUpRight[i + cur] = 1;
        isusedDownRight[cur - i + n - 1] = 1;
        nqueen(cur + 1);
        isusedCol[i] = 0;
        isusedUpRight[i + cur] = 0;
        isusedDownRight[cur - i + n - 1] = 0;
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    fill(isusedCol, isusedCol + 40, 0);
    fill(isusedUpRight, isusedUpRight + 40, 0);
    fill(isusedDownRight, isusedDownRight + 40, 0);
    nqueen(0);
    cout << answer;
    return 0;
}

'Algorithm' 카테고리의 다른 글

BOJ 2579 c++  (0) 2020.07.15
BOJ 11726 c++  (0) 2020.07.15
BOJ 1182 c++  (0) 2020.07.14
BOJ 11728 c++  (0) 2020.07.14
BOJ 15694 c++  (0) 2020.07.13
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom