https://www.acmicpc.net/problem/9663
9663번: N-Queen
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제
N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.
N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (1 ≤ N < 15)
출력
첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.

#include <iostream>
using namespace std;
int N;
int result;
int col[15];//col[x] = 1 // x행의 queen위치는 1열
bool check(int row)
{
for (int i = 0; i < row; i++)
{
if (col[row] == col[i] || row - i == abs(col[row] - col[i]))//세로, 대각선에 퀸이 있다면 false
return false;
}
return true;
}
void dfs(int row)
{
if (row == N)
{
result++;
return;
}
for (int i = 0; i < N; i++)
{
col[row] = i;//일단 해당 row의 i열에 퀸을 넣어보고
if (check(row))//check함수를 통해 다른 퀸과 안 닿는지 검사
{
dfs(row + 1);//통과하면 다음 행으로
}
}
return;
}
int main()
{
cin >> N;
dfs(0);
cout << result;
}
'백준 c++ > (2-1)백준 c++ 알고리즘 중급' 카테고리의 다른 글
백준 1062 c++ 가르침 (0) | 2023.02.02 |
---|---|
백준 4574 c++ 스도미노쿠 (0) | 2023.01.31 |
백준 16198 c++ 에너지 모으기 (1) | 2023.01.27 |
백준 16197 c++ 두 동전 (0) | 2023.01.26 |
백준 15658 c++ 연산자 끼워넣기(2) (0) | 2023.01.25 |