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

 

9663번: N-Queen

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

#include <iostream>
#include <algorithm>

using namespace std;

int N;
int col[15];
int result=0;

//대각선이나 같은 줄에 있으면 false를 반환 아니라면 true
bool isPromising(int i){
    for(int j=0;j<i;j++){
        if(col[j]==col[i] || abs(col[i]-col[j])==(i-j)){
            return false;
        }
    }
    return true;
}
//N개 만큼 놓았으면 +1 하나 놓을 때마다 확인
void nQueen(int i){
    if(i==N){
        result++;
        return;
    }else{
        for(int j=0;j<N;j++){
            col[i]=j;
            if(isPromising(i)){
                nQueen(i+1);
            }
        }
    }
}

int main(){
    cin>> N;
    nQueen(0);
    cout<<result<<endl;
    return 0;
}

 

+ Recent posts