#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

+ Recent posts