题目:http://acm.hdu.edu.cn/showproblem.php?pid=2553
思路:
位运算优化,最优雅的写法。
#include<bits/stdc++.h>
using namespace std;
int lim,sum;
void dfs(int row,int left,int right){
int pos,p;
if(row!=lim){
pos=lim&~(row|left|right);
while(pos!=0){
p=pos&-pos; //从最右边的1开始找
pos=pos-p; //去掉最右边的1
dfs(row+p,(left+p)<<1,(right+p)>>1); //更改对下一行的影响
}
}
else{
sum++;
}
}
int main(){
int n;
while(scanf("%d",&n)&&n){
sum=0;
lim=(1<<n)-1;
dfs(0,0,0);
cout<<sum<<endl;
}
return 0;
}
本文介绍了一种使用位运算优化的N皇后问题解决方案,通过递归深度优先搜索算法结合位运算技巧来高效地计算所有可行解的数量。代码采用C++编写,展示了如何利用位操作简化逻辑并提高计算效率。
690

被折叠的 条评论
为什么被折叠?



