9도 OJ 1254: N황후 문제(N황후 문제, 귀속, 거슬러 올라가기)
메모리 제한: 128메가바이트
특수 판제: 아니요
제출: 765
해결
제목 설명:
N황후 문제, 즉 N*N의 네모난 바둑판 안에 N황후를 놓아서 서로 공격하지 못하게 하는 것이다(즉 임의의 황후 2명은 같은 줄, 같은 열, 같은 사선에 있는 것을 허락하지 않는다. 왜냐하면 황후는 직진, 가로, 옆으로 아래와 같이 갈 수 있기 때문이다).
당신의 임무는 주어진 N에 대해 몇 가지 합법적인 방치 방법을 구하는 것입니다.출력 N황후 문제의 모든 다른 배치 상황 개수.
입력:
여러 그룹의 테스트 데이터를 포함하는 것을 입력하십시오.각 그룹의 테스트 데이터는 정수 n(3
각 그룹의 테스트 데이터에 대해 출력은 모두 다른 배치 상황 개수를 출력하고 결과는 단독 한 줄입니다.
샘플 입력:
4
샘플 출력:
2
생각:
N황후 문제의 일반적인 해법은 탐색 소거법으로 모든 해를 제시할 수 있다.하나만 풀면 된다면, 랜덤 해법도 있다.
일반적인 해법보다 더 효율적인 것은 비트 연산 해법이다.
양자의 상세한 소개는 나의 또 다른 글인 《N황후 문제 알고리즘》을 참조하세요.
코드:
#include <stdio.h>
int n, allPlacedState, count;
void queen(int row, int ld, int rd)
{
if (row != allPlacedState)
{
int pos = allPlacedState & ~(row | ld | rd);
while (pos)
{
int p = pos & -pos;
pos -= p;
queen(row+p, (ld+p)<<1, (rd+p)>>1);
}
}
else
{
count ++;
}
}
int main()
{
while (scanf("%d", &n) != EOF)
{
allPlacedState = (1<<n)-1;
count = 0;
queen(0, 0, 0);
printf("%d
", count);
}
return 0;
}
/**************************************************************
Problem: 1254
User: liangrx06
Language: C
Result: Accepted
Time:90 ms
Memory:912 kb
****************************************************************/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 백엔드에서 데이터를 트리로 변환하고 맵은 json 트리를 생성하여 백엔드로 되돌려줍니다. (백엔드 변환)java 백엔드, 데이터를 트리로 변환하고,map는 json 트리를 생성하여 전방으로 되돌려줍니다(백엔드 변환) 1. 왜 이런 블로그를 쓰나요? 2.java 백엔드 코드 3. 전환된 데이터는 다음과 유사한 형식으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.