9663 - N-Queen
//N-Queen
//row 행
//col 열
#include <bits/stdc++.h>
using namespace std;
int n;
int result = 0;
vector<int> queen; //i번째 행의 열의 위치
bool isvalid(int row, int col) //놔도 되는지 검사하는 함수
{
for(int i = 0; i < row; i++) //같은 열, 같은 대각선은 false
{
if(queen[i] == col || abs(queen[i] - col) == abs(i - row))
{
return false;
}
}
return true;
}
void recursion(int row)
{
if(row == n) //종료조건 n줄 모두 퀸을 놓았다
{
result++;
return;
}
for(int col = 0; col < n; col++) //현재 행에서 가능한 모든 열을 탐색
{
if(isvalid(row, col)) //놓을수 있다면(가능한 열이라면), 안된다면 col++
{
queen[row] = col; //퀸을 row행에 col열에 놓음(기록)
recursion(row + 1); //재귀호출
}
}
}
int main()
{
cin >> n;
queen.resize(n);
recursion(0);
cout << result << endl;
return 0;
}