Problem Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。

Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。

Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。

Sample Input

1
8
5
0

Sample Output

1
92
10

解题思路:
这题我们用了:

if (!col[y] && !duijiao1[x + y] && !duijiao2[x - y + n])

进行剪枝,但是没用,还是超时,所以我们要用打表的方法,在main()中提取算好答案,然后存储在数组中,等读取输入后立刻输出,而不是等输入了n,在慢慢计算,会超时。

代码如下:

#include <iostream>
#include <cstring>
using namespace std;
int ans = 0;
int n;
const int N = 1010;
bool col[N], duijiao1[N], duijiao2[N];void dfs(int x) {if (x > n) {ans++;return ;}for (int y = 1; y <= n; y++) {if (!col[y] && !duijiao1[x + y] && !duijiao2[x - y + n]) {col[y] = duijiao1[x + y] = duijiao2[x - y + n] = true;dfs(x + 1);col[y] = duijiao1[x + y] = duijiao2[x - y + n] = false;}}
}int main() {while (cin >> n, n) {memset(col, 0, sizeof(col));memset(duijiao1, 0, sizeof(duijiao1));memset(duijiao2, 0, sizeof(duijiao2));ans = 0;dfs(1);cout << ans << endl;}return 0;
}

打表大法:

#include <iostream>
#include <cstring>
using namespace std;
int ans = 0;
int n;
const int N = 1010;
bool col[N], duijiao1[N], duijiao2[N];
int biao[15];void dfs(int x) {if (x > n) {ans++;return ;}for (int y = 1; y <= n; y++) {if (!col[y] && !duijiao1[x + y] && !duijiao2[x - y + n]) {col[y] = duijiao1[x + y] = duijiao2[x - y + n] = true;dfs(x + 1);col[y] = duijiao1[x + y] = duijiao2[x - y + n] = false;}}
}int main() {for ( n = 1; n <= 10; n++) {ans = 0;memset(col, 0, sizeof(col));memset(duijiao1, 0, sizeof(duijiao1));memset(duijiao2, 0, sizeof(duijiao2));dfs(1);biao[n] = ans;}while (cin >> n, n) {cout << biao[n] << endl;}return 0;
}

hdu2553 N皇后问题-dfs回溯剪枝+打表相关推荐

  1. 洛谷 P1219-八皇后(dfs回溯)

    题目描述 网址传送:https://www.luogu.com.cn/problem/P1219 八皇后问题描述:介是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于 ...

  2. POJ1416 Shredding Company ACM解题报告(DFS回溯+剪枝)

    本渣渣明天C语言考试,今天有点亢奋,又来了一题,这题感觉比前一题难多了,不仅是字符串转化为数字,即使看了百度提醒的搜索树,还是参考了一些百度的代码.感觉道阻且长,我仍需努力.下面是题目翻译: 公司现在 ...

  3. HDU2553 N皇后问题【DFS+回溯法】

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  4. 【LeetCode】回溯 N皇后(DFS、子集、组合问题)

    总结 技巧: 子集和组合问题经常需要一个start来标记开始选择的起始位置来达到去重的目的,排列问题不用 [46.全排列] 排列问题常需要一个used数组来标记已经选择的元素(也可以同时用于去重) C ...

  5. 岛屿问题,矩阵:DFS+标记剪枝+回溯

    深度优先搜索: 可以理解为暴力法遍历矩阵中所有字符串可能性.DFS 通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推. 剪枝: 在搜索中,遇到 这条路不可能和目标字符串匹配成 ...

  6. DFS+回溯算法专题

    基础知识 回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 深度优先搜索(Depth-Fi ...

  7. 八皇后时间复杂度_回溯算法 | 追忆那些年曾难倒我们的八皇后问题

    文章收录在公众号:bigsai,关注更多干货和学习资源 记得点赞.在看 前言 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题-- 在这里 ...

  8. Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)

    文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...

  9. HDU1016 Prime Ring Problem dfs+回溯

    点击打开链接 Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

最新文章

  1. python链表怎么定义_码哥聊Python数据结构--链表
  2. 解读高效的神经架构搜索ENAS
  3. ajax文件上传重置,解决AjaxFileupload 上传时会出现连接重置的问题
  4. nginx 上传 文件超时设置_Ingressnginx自定义配置文件
  5. python常用工具
  6. 基于信息熵确立权重的topsis法_基于信息熵和TOPSIS法的装备战场抢修排序决策模型...
  7. HTTP和HTTPS有什么区别? 什么是SSL证书?使用ssl证书优势?
  8. 杭电oj-----Farm Irrigation(BFS)
  9. 为Navicat ER图增添字段备注
  10. 论文笔记:针对盲化的 RSA算法的水平聚类侧信道攻击
  11. python图像风格迁移_Python 超简单实现9种图像风格迁移
  12. Eplan如何添加“连接定义点”
  13. jzoj5234. 【NOIP2017模拟8.7A组】外星人的路径
  14. javaserver_JavaServer页面简介
  15. Endnote导入下载好的引用文件
  16. git:历史版本回滚、重新回到最新版本及取消修改内容
  17. 开源虚拟机Bochs安装以及踩坑
  18. kafka-topics.sh java.rmi.server.ExportException: Port already in use: 5555
  19. 中国企业在欧洲专利申请量高居第一名,凸显技术研发实力持续提升
  20. 工业现场设备互联互通问题分析及解决思路

热门文章

  1. Android之java.lang.ClassCastException: *****cannot be cast to*******
  2. 剑指offer之二叉树的镜像
  3. Android之ActivityManager与Proxy模式的运用
  4. Android之6.0上的重要变化(一)
  5. solidity struct 结构体创建与使用浅学 (四)
  6. 你在孩子身上偷的懒,终将会变成最大的遗憾
  7. MIT正式发布编程语言Julia 1.0:Python、R、C++三合一
  8. 国内各大平台的推荐算法,看到360的时候笑喷了……
  9. java 继承 子类 实例化_关于Java继承中父类和子类构造函数的问题
  10. c语言不通类型指针转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...