코드 [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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.