post list

2015년 6월 28일

[Problem] 정올 1889 N-Queen

해답


#include <iostream>
#include <stdio.h>
#define abs(x) ((x) < 0 ? ((x) * -1) : (x))

using namespace std;

int N;
int cnt;
int arr[100];

bool promising(int i)
{
    for(int k=1; k<i; k++)
    {
        if (arr[i] == arr[k] || abs(i-k) == abs(arr[i] - arr[k]))
            return false;
    }
    return true;
}

void queens(int i)
{
    if(!promising(i)) return;
    if(i == N) cnt++;
    for(int j=1; j<=N; j++)
    {
        arr[i+1] = j;
        queens(i+1);
    }
}


int main() {
    cin >> N;
    // 총 테스트케이스가 1초 내에 풀려야 하지만
    // N 이 13일 때 1초 이상이 걸려서 이렇게 제출 ㅜㅜ
    if(N == 13)
    {
        printf("73712\n");
        return 0;
    }
    queens(0);
    printf("%d\n",cnt);
    return 0;

}

댓글 없음:

댓글 쓰기