n皇后问题
方法1:递归
#include <iostream>
#include <cstring>
using namespace std;
void dfs(int row);
int n,sum=0;
int sol[100];
int main() {
cin>>n;
memset(sol,0,sizeof(sol));
dfs(0);
cout<<sum<<endl;
return 0;
}
void dfs(int row){
for (int col=0;col<n;col++){
bool ok = true;
for (int i=0;i<row;i++) {
if (col==sol[i]||col-sol[i]==row-i||sol[i]-col==row-i){
ok = false;
break;
}
}
if(ok){
sol[row] = col;
if(row==n-1){
sum++;
}
else{
dfs(row+1);
}
}
}
}方法二:改进递归

方法三:用位运算,省空间
最后更新于