1. 程式人生 > >N皇后問題(位運算)

N皇后問題(位運算)

描述
會下國際象棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將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; }