N皇后問題(位運算)
阿新 • • 發佈:2019-02-14
描述
會下國際象棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上(有8 * 8個方格),使它們誰也不能被吃掉!這就是著名的八皇后問題。
在國際象棋棋盤上放置N個皇后,要求輸出放置方案總數。
輸入
皇后個數。
輸出
放置的方案總數。
原始碼如下:
#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
int dfs(int row,int ld,int rd)
{
int lim=(1<<n)-1;
int p,pos;
if(row!=lim)
{
pos =lim&~(row|ld|rd);
while(pos)
{
p=pos&-pos;
pos-=p;
dfs(row+p,(ld+p)<<1,(rd+p)>>1);
}
}
else ans++;
}
int main()
{
cin>>n;
dfs(0,0,0);
cout<<ans;
}