您的位置:首页 > 其它

1295 N皇后问题

2016-06-05 19:52 197 查看

1295 N皇后问题

时间限制: 2 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

题解

题目描述 Description

在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。

输入描述 Input Description

给定棋盘的大小n (n ≤ 13)

输出描述 Output Description

输出整数表示有多少种放置方法。

样例输入 Sample Input

8

样例输出 Sample Output

92

数据范围及提示 Data Size & Hint

n<=13

(时限提高了,不用打表了)

分类标签 Tags 点此展开

搜索

代码:

#include<cstdio>
using namespace std;
#define N 101
int a
,b
,c
,d
,n,tot;
void go(int i){
for(int j=1;j<=n;j++){//寻找放置皇后的位置
if(!b[j]&&!c[i+j]&&!d[i-j+n-1]){//寻找放置皇后的位置 //由于C++不能操作负数组,因此考虑加n-1
a[i]=j;//摆放皇后
b[j]=1;//宣布占领第j列
c[i+j]=1;//占领两个对角线
d[i-j+n-1]=1;
if(i==n) tot++;//n个皇后都放置好,一种情况
else go(i+1);//继续递归放置下一个皇后
b[j]=0;//递归返回即为回溯一步,当前皇后退出
c[i+j]=0;
d[i-j+n-1]=0;
}
}
}
int main(){
scanf("%d",&n);
go(1);
printf("%d\n",tot);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: