백준 9663 c++
#include <iostream>
using namespace std;
int* chess_board;
int N, cnt = 0;
int input(int lower, int upper)
{
//cout << "input()" << endl;
int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
bool check(int num)
{
//cout << "check()\n";
int i;
for (i = 0; i < num; i++)
{
if ((chess_board[num] == chess_board[i])
|| (num - i == chess_board[num] - chess_board[i])
|| (num - i == -1*(chess_board[num] - chess_board[i])))
{
return false;
}
else
{
;
}
}
return true;
}
//퀸이 서로 공격할 수 없으려면, 같은 열, 같은 행, 대각선에 위치하면 안된다.
void dfs(int num)
{
//cout << "dfs()\n";
int i;
if (N == num)//N개의 퀸을 배치했을 경우
{
cnt++;
}
else//N개의 퀸을 배치하지 못한 경우
{
for (i = 0; i < N; i++)
{
chess_board[num] = i;
if (check(num) == true)
{
dfs(num + 1);
}
else
{
;
}
}
}
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int i;
N = input(1, 15);
chess_board = new int[N];
dfs(0);
cout << cnt << "\n";
delete[] chess_board;
return 0;
}