코드 [VS] 1295 N 황후 문제

제목 링크: 코드 [VS] 1295 N 황후 문제
제목 설명
n 에 있다×n 칸 의 바둑판 에는 서로 공격 을 받 지 않 는 n 개의 황후 가 놓 여 있다.체스 의 규칙 에 따라 황 후 는 그것 과 같은 줄 이나 같은 줄 또는 같은 사선 에 있 는 바둑 알 을 공격 할 수 있다.n 후 문 제 는 n 과 같다.×n 의 바둑판 에 n 개의 황 후 를 놓 으 면 두 명의 황 후 는 같은 줄 이나 같은 열 또는 같은 사선 에 놓 아 도 된다.
입력 설명 입력 설명
바둑판 의 크기 n (n ≤ 13) 지정
출력 설명 출력 설명
출력 정 수 는 몇 가지 방치 방법 이 있 는 지 를 나타 낸다.
샘플 입력 샘플 입력
8
샘플 출력 샘플 출력
92
생각:
깊이 우선 검색 은 주로 두 개의 바둑 알 이 한 대각선 에 있 는 지 여 부 를 판단 하 는 것 입 니 다. 행 의 차 이 는 절대 치 입 니 다. 만약 에 바둑 알 의 위치 와 차이 가 나 는 절대 치 를 기다 리 면 두 바둑 알 은 반드시 한 대각선 에 있 습 니 다.
코드 는 다음 과 같 습 니 다:
/*************************************************************************
    > File Name: 1295_N    .cpp
    > Author: dulun
    > Mail: [email protected]
    > Created Time: 2016 03 09      12 23 40 
 ************************************************************************/

#include
#include
#include
#include
#include
#define LL long long
using namespace std;

const int N = 20;
int  chess[N];
int ans = 0;
int n;


int check(int x)
{
    int i, j;
    for(i = 1; i < x; i++)
    {
        if(chess[i] == chess[x] || abs(chess[x]-chess[i]) == abs(x-i))
             //                               
            return 0;
    }
    return 1;
}


void dfs(int x)
{
    if(x == n+1) ans++;
    for(int i = 1; i <= n; i++)
    {
        chess[x] = i;
        if(check(x)) dfs(x+1);
    }
}


int main()
{
    scanf("%d", &n);
    dfs(1);
    printf("%d
"
, ans); return 0; }

좋은 웹페이지 즐겨찾기