还是n皇后(位运算)
好题解:https://blog.csdn.net/qq_40828060/article/details/79364577
位运算的各种使用。
小范围手模一下最好了。
#include<bits/sdtc++.h> using namespace std; char s[17]; int p[17]; int n; int END; int ans=0; int lowbit(int t){ return t&(-t); } void dfs(int hang,int left,int right,int h){//依次是 行状态,左对角线,右对角线,第h行 if(END==hang){//全部放完//////////// ans++;//方法数加一 return; } int y,m; int cur= hang | left | right | p[h];//第h行的状态 m= (~cur) & END;//取反 并除去高位的影响 while(m){ y=lowbit(m); m-=y; dfs(hang+y,(left+y)<<1,(y+right)>>1,h+1); } } int main(){ cin>>n;//输入n cin.ignore();//吃掉回车 for(int i=0;i<n;i++){ scanf("%s",s);//逐个输入字符 for(int j=0;j<n;j++){ if(s[j]=='.')//如果遇到障碍, p[i]|=(1<<(n-j-1));//将第(n-j-1)位标记为1 } } END=(1<<n)-1;//放完状态 dfs(0,0,0,0); cout<<ans; return 0; }
作者:wilxx
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.