八皇后(N=8)基本要求:
- 任意两点不得在同一列或同一行
- 任意两点连线不得与对角线重合或平行
方法
- 采用递归方法进行寻找
- 利用位运算来进行优化
变量
- board(棋盘) 初始化:board=(1>>N)-1 (board二进制表示为 :11111111)
- row(存储已经放上棋子的列,表示为1 ,未存放棋子的列表示为0 )
- left_Diagonal(自左向右的对角线)(本行不可存放棋子的位置表示为一,可存放的表示为0)
- right_Diagonal(自右向左的对角线) (同上)
- all是全局变量,表示所有可以使八皇后成立的条件
void check(int row,int left_Diagonal,int right_Diagonal)
{
int pos,place;
if(row!=board)
{
pos=board&(~(row|left_Diagonal|right_Diagonal));
while(pos)
{
place=pos&(~pos+1);
pos=pos-p;
check(row|place,(left_Diagonal|place)>>1,(right_Diagoal|place)<<1);
}
}
else
all++;
}