반응형
문제 링크 : https://www.acmicpc.net/problem/9663
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
> 풀이
백트래킹 입문 문제로 유명한 n-Queen 문제입니다.
백트래킹은 dfs방식인데, dfs는 스택을 통해 구현이 됩니다.
함수의 재귀 호출 또한 스택의 일종인 점 생각하시면 이해하시는데 편할 겁니다.
#include <stdio.h>
#include <stdlib.h>
bool promising(int n);
void nQueen(int n);
int queen[15];
int num, cnt;
int main(void) {
scanf("%d", &num);
nQueen(0);
printf("%d", cnt);
return 0;
}
bool promising(int n) {
for (int i = 0; i < n; i++)
if (queen[i] == queen[n] || abs(queen[i] - queen[n]) == abs(i - n))
return false;
return true;
}
void nQueen(int n) {
if (n == num) cnt++;
else {
for (int i = 0; i < num; i++) {
queen[n] = i;
if (promising(n)) nQueen(n + 1);
}
}
}
(개발 환경 : vs code)
반응형
'알고리즘 (백준) > BOJ 길라잡이 (1)' 카테고리의 다른 글
백준 14889 (스타트와 링크) / C++ (0) | 2020.07.13 |
---|---|
백준 6603 (로또) / C++ (0) | 2020.07.11 |
백준 5430 (AC) / C++ (0) | 2020.07.10 |
백준 1966 (프린터 큐) / C++ (0) | 2020.07.08 |
백준 1874 (스택 수열) / C++ (0) | 2020.07.08 |