본문 바로가기
알고리즘

백준 g4 9663 N-Queen c++

by kyj0032 2024. 1. 15.

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

 

 

수도 코드

func (int i) { // i번째 행에 퀸을 둘 차례 (i: 0 ~ N-1)
	if (i == M)
    	answer++; return;
    
    for(j: 0 ~ N-1) {
    	if (열, 우상향 대각선, 좌상향 대각선에 없을 때)
        	isused 표시
            func(i+1(
            isused 표시했던 거 되돌리기
    }
}

 

 

코드

/*boj g4 9663 N-Queen*/
#include <iostream>
#define MAXN 16
using namespace std;

int N;

bool isused1[MAXN];
bool isused2[2 * MAXN];
bool isused3[2 * MAXN];

int answer;
void func(int i) { // i번째 행을 정해야 함 (i: 0~ N-1)
    if (i == N) {
        answer++;
        return;
    }

    for (int j = 0; j < N; j++) {
        if (isused1[j]) continue;
        if (isused2[i + j]) continue;
        if (isused3[i - j + N - 1]) continue;

        isused1[j] = 1;
        isused2[i + j] = 1;
        isused3[i - j + N - 1] = 1;
        func(i + 1);
        isused1[j] = 0;
        isused2[i + j] = 0;
        isused3[i - j + N - 1] = 0;
    }
}

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

    func(0);
    cout << answer << "\n";
}

'알고리즘' 카테고리의 다른 글

백준 s3 15650 N과 M (2) c++  (0) 2024.01.15
백준 s2 1182 부분수열의 합 c++  (0) 2024.01.15
백준 s3 15649 N과 M (1) c++  (0) 2024.01.15
백준 g5 2448 별 찍기 - 11 c++  (0) 2024.01.13
백준 2447 g5 별 찍기 - 10 c++  (0) 2024.01.13