#include<iostream>
using namespace std;
int* queen = new int[8];
int count=0;
bool IsLegal(int currentrow, int currentcolum) {
for (int precolum = 0; precolum < currentcolum; precolum++)
{
int row = queen[precolum];
if (row == currentrow) { return false; }
int rowdiff = abs(row - currentrow);
int columdiff = abs(precolum - currentcolum);
if (rowdiff == columdiff) { return false; }
}
return true;
}
void eight_queen(int currentcolum) {
for (int row = 0; row < 8; row++)
{
if (IsLegal(row, currentcolum))
{
queen[currentcolum] = row;
if (currentcolum != 7)
{
eight_queen(currentcolum+1);
}else{
count++;
}
}
}
}
int main() {
eight_queen(0);
printf("%d", count);
return 0;
}
class Solution {
public:
vector<vector<string>> res;
bool isValid(vector<string>&chessboard, int row, int col, int n){
for(int i=0;i<row;i++){
if(chessboard[i][col]=='Q')
return false;
}
for (int i = 1; row-i>=0 && col+i<n;++i){
if(chessboard[row-i][col+i]=='Q')
return false;
}
for(int i = 1; row-i>=0 && col-i>=0;++i){
if(chessboard[row-i][col-i]=='Q')
return false;
}
return true;
}
void dfs(vector<string>&chessboard,int row,int n){
if(row==n){
res.push_back(chessboard);
return;
}
for(int col=0;col<n;col++){
if(isValid(chessboard, row, col, n)){
chessboard[row][col]='Q';
dfs(chessboard,row+1,n);
chessboard[row][col]='.';
}
}
}
vector<vector<string>> solveNQueens(int n) {
vector<string> chessboard(n,string(n,'.'));
dfs(chessboard,0,n);
return res;
}
};