程序员面试题精选100题(58)-八皇后问题

题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法。请求出总共有多少种摆法。

[img]http://dl.iteye.com/upload/picture/pic/94902/133043c3-9957-3c21-a5e0-4bf77c4d3f44.jpg[/img]

从第一行开始放皇后,那么就不需要判断行是否安全,因为肯定安全,所以只需要判断该列是否安全,而且改对角线是否安全
col[0..7] 用true或者false表示
左对角线right[i+j],因为向左移就要向下移,一加一减总数没变
右对角线left[i-j]--为了避免出现负数 left[i-j+8]

[code]
void try(int row){//试第row行
int col; //循环变量,表示列号
int tmp; //临时变量
for(col=1;col<=8;col++){
if(c[col]&&right[row+col]&&left[row-col+8]){
list.add(row+" "+col);
c[col]=false;
right[row+col]=false;
left[row-col+8]=false;
if(row<8){
try(row+1);
}else{
打印list
}
c[col]=true;
right[row+col]=true;
left[row-col+8]=true;
}
}
}
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值