#include <iostream>
int DP[16] = {};
int N = 0;
int iAns = 0;
bool Check(int iLow)
{
for (int i = 0; i < iLow; ++i)
{
if (DP[i] == DP[iLow] || abs(DP[iLow] - DP[i]) == iLow - i)
{
return false;
}
}
return true;
}
void NQueen(int iN)
{
if (iN == N)
++iAns;
else
{
for (int i = 0; i < N; ++i)
{
DP[iN] = i;
if (Check(iN))
NQueen(iN + 1);
}
}
}
int main()
{
std::cin >> N;
NQueen(0);
std::cout << iAns;
return 0;
}
정말 모든 수를 다 계산해야합니다.
같은 선인지, 같은 줄에 있는지, 같은 대각선에 있는 지 모두 계산하고 가능하다면 +1,
안되면 다시 더해주는 방식입니다.
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 2096 내려가기 (0) | 2022.10.17 |
---|---|
[C++] 백준 11404 플로이드 (1) | 2022.10.14 |
[C++] 백준 9251 LCS (0) | 2022.10.12 |
[C++] 백준 2263 트리의 순회 (0) | 2022.10.12 |
[C++] 백준 1967 트리의 지름 (0) | 2022.10.10 |