题目链接:N皇后问题
同样是一道很裸的N皇后问题,直接贴板子,不过需要注意的是这道题目可以存一个表扔进去,否则会超时
#include <bits/stdc++.h>
using namespace std;
int n,ind,ans[1500][100],cot[15];
bool row[1200],dia1[2500],dia2[2500];
void dfs(int q){
if(q > n){
ind++;
for(int i = 1;i <= n;i++)
ans[ind][i] = ans[ind-1][i];
return ;
}
for(int r = 1;r <= n;r++){
if(row[r]&&dia1[r+q]&&dia2[n-q+r]){
row[r] = dia1[r+q] = dia2[n-q+r]=false;
ans[ind][q] = r;
dfs(q+1);
row[r] = dia1[r+q] = dia2[n-q+r]=true;
}
}
}
int main(){
ios::sync_with_stdio(false);
memset(row,true,sizeof(row));
memset(dia1,true,sizeof(dia1));
memset(dia2,true,sizeof(dia2));
memset(cot,0,sizeof(cot));
for(int i = 1;i <= 10;i++){
ind = 1;
n = i;
dfs(1);
cot[i] = ind-1;
}
while(cin>>n&&n!=0){
cout<<cot[n]<<endl;
}
return 0;
}