【题解】 状态压缩 CSYZOJ 1040 || codevs 1295 || hdu 2553 N皇后问题
来源:互联网 发布:放牛班的春天影评知乎 编辑:程序博客网 时间:2024/06/14 08:52
hdu2553需要记忆化答案
就当我是来水博客的吧
不过确实跟我要讲的状压dp有关啊
当然不用在意CSYZOJ
只是对于YZOJ评测机卡我不爽
题目
题目描述
在N*N的棋盘上放置N个皇后(n<=10)而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置2个皇后),编程求解所有的摆放方法。
输入
一个数,N。
输出
每行输出一种方案,每种方案顺序输出皇后所在的列号,各个数之间有空格隔开。若无方案,则输出:”no solute!”
样例输入
4
样例输出
2 4 1 3
3 1 4 2
提示
1 <= N <= 8
题解
当然是每一行枚举列
压缩掉所放的列,和左右两个方向的对角线
画个图来观察第几条对角线和位置的关系即可处理对角线的表示
代码
#include <cstdio>const int maxn = 10;int n, res[maxn];bool flag = false;void dfs(int th, int col, int ri, int le){//column right left if (th > n){ for (int i = 1; i <= n; ++i) printf ("%d ", res[i]); printf ("\n"); return ; flag = true; } int rit = th - 1, let = n - th; for (int i = 1, j; i <= n; ++i){ if (!((col & (1 << i)) | (ri & (1 << rit + i)) | (le & (1 << let + i)))){ res[th] = i; dfs(th + 1, col | (1 << i), ri | (1 << rit + i), le | (1 << let + i)); } }}int main (){ scanf ("%d", &n); dfs(1, 0, 0, 0); if (!flag) printf ("no solute!"); return 0;}
阅读全文
0 0
- 【题解】 状态压缩 CSYZOJ 1040 || codevs 1295 || hdu 2553 N皇后问题
- CodeVS 1295 N皇后问题 题解
- HDU n皇后问题(状态压缩)
- hdu-2553 N皇后问题(深搜 + 状态压缩)
- 状态压缩 - N皇后问题
- CODEVS 1295N皇后问题
- Codevs 1295 N皇后问题
- 【codevs 1295】N皇后问题
- N皇后问题(状态压缩实现)
- HDU 2553 N皇后问题(2种详细题解)
- DFS练习-codevs-1295N皇后问题
- CODEVS 1295 N皇后问题 (DFS)
- 【CodeVS】1295 N皇后
- 【codevs】p1295 n皇后问题
- Codevs P1295 N皇后问题
- HDU 2553 N皇后问题
- HDU 2553 N皇后问题
- HDU 2553-N皇后问题
- 去除select边框和三角-----appearance:none
- 反转链表
- 论文阅读(1)-
- UIAlertView中的textField输入文本过长时偏移
- mybatis学习之查询缓存
- 【题解】 状态压缩 CSYZOJ 1040 || codevs 1295 || hdu 2553 N皇后问题
- 【正一专栏】故意豪宅纵火的保姆会判死刑吗?
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 选择排序算法
- hdu 4689
- 元组tuple
- [Sklearn应用1] Preprocessing data(一) 标准化 正则化
- 【bzoj1878】[SDOI2009]HH的项链
- 关于spring mvc3的注解之@ResponseBody的使用