刷清橙OJ--A1085.2n皇后问题
来源:互联网 发布:java hash算法 编辑:程序博客网 时间:2024/06/15 00:28
问题:
A1085. 2n皇后问题
时间限制:1.0s 内存限制:512.0MB
总提交次数:2937 AC次数:1111 平均分:52.38
问题描述
给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。
输入格式
输入的第一行为一个整数n,表示棋盘的大小。
接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。
输出格式
输出一个整数,表示总共有多少种放法。
样例输入
4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
样例输出
2
样例输入
4
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
样例输出
0
代码:
#include <cstdio> #include <cstring> #include <cstdlib> using namespace std; int n, k = 0; bool lb[20], lw[20], rb[20], rw[20], hb[10], hw[10], mp[10][10]; void se(int p) { if(p > n){++k; return;} for(int i = 1; i <= n; ++i) if(mp[p][i] && hb[i] && lb[p - i + n] && rb[p + i]){ hb[i] = lb[p - i + n] = rb[p + i] = false; for(int t = 1; t <= n; ++t) if(mp[p][t] && hw[t] && lw[p - t +n] && rw[p + t] && i != t){ hw[t] = lw[p - t + n] = rw[p + t] = false; se(p+1); hw[t] = lw[p - t + n] = rw[p + t] = true; } hb[i] = lb[p - i + n] = rb[p + i] = true; } } int main() { memset(lb,true,sizeof(lb)); memset(lw,true,sizeof(lw)); memset(rb,true,sizeof(rb)); memset(rw,true,sizeof(rw)); memset(hb,true,sizeof(hb)); memset(hw,true,sizeof(hw)); scanf("%d",&n); for(int i = 1; i <= n; ++i) for(int t = 1; t<= n; ++t) scanf("%d",&mp[i][t]); se(1); printf("%d",k); return 0; }
个人想法:代码来自试题讨论
阅读全文
0 0
- 刷清橙OJ--A1085.2n皇后问题
- HDU-OJ---N皇后问题(DFS)
- 南邮 OJ 1319 n皇后问题
- SWUST OJ 1768 n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2N皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- QGroupBox的使用
- 习题5-7 使用函数求余弦函数的近似值
- angularJS之mac安装
- Linux运维常用脚本整理
- Sybase数据库的开启关闭
- 刷清橙OJ--A1085.2n皇后问题
- C# 开发环境搭建
- Replace Inheritance with Delegation(以继承取代委托)
- Java语言的动态性-invokedynamic
- TCP服务器端和客户端程序设计
- 打造一个高逼格的android开源项目——小白全攻略
- ubuntu16中遇到libgstreamer-0.10.so.0缺失解决方案(装Qt时遇到的问题)
- 前端之路
- RequireJS模块化开发百度地图