hdu2553 N皇后问题-dfs回溯剪枝+打表

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归算法(三)- 回溯法Backtracking

回溯法 回溯法Backtracking&#xff08;找所有的可能&#xff09;递归&#xff1a; 类似枚举&#xff0c;一层一层向下递归&#xff0c;尝试搜索答案。找到答案&#xff1a; > 返回答案&#xff0c;并尝试别的可能未找到答案&#xff1a; > 返回上一层递归&#xff0c;…

python3.8安装xlwings出错_Python xlwings模块简单使用

Python xlwings模块简单使用xlwings 安装xlwings excel-book-打开-新建xlwings sheet-apixlwings 操作数据xlwings 读取数据xlwings 安装操作excel模块的比较xlwings官方文档基本操作安装pip install xlwingsxlwings 打开-新建打开excel文件多个excel操作import …

今年暑假不AC-贪心

Problem Description “今年暑假不AC&#xff1f;” “是的。” “那你干什么呢&#xff1f;” “看世界杯呀&#xff0c;笨蛋&#xff01;” “#$%^&*%…” 确实如此&#xff0c;世界杯来了&#xff0c;球迷的节日也来了&#xff0c;估计很多ACMer也会抛开电脑&#xff0…

一个全栈式的应用集成平台,打破“信息孤岛”

源宝导读&#xff1a;随着企业数字化进程的逐渐深入&#xff0c;企业存在大量的异构系统&#xff0c;各个系统之间信息传输、资源利用困难。本文将介绍明源云ERP为了打破这种“信息孤岛”&#xff0c;而进行的思考与实践。一、前言随着企业信息化进程的逐步深入&#xff0c;互联…

XGBoost-工程实现与优缺点(中)

工程实现 块结构设计 我们知道&#xff0c;决策树的学习最耗时的一个步骤就是在每次寻找最佳分裂点是都需要对特征的值进行排序。而 XGBoost 在训练之前对根据特征对数据进行了排序&#xff0c;然后保存到块结构中&#xff0c;并在每个块结构中都采用了稀疏矩阵存储格式&…

gson生成jsonobject_使用GSON将字符串解析为JsonObject会产生IllegalStateException:这不是JSON对象...

我有以下代码&#xff1a;JsonParser parser new JsonParser();System.out.println("gson.toJson: " gson.toJson(roomList));JsonObject json2 parser.parse("{\"b\":\"c\"}").getAsJsonObject();System.out.println("json2:…

根据二叉树的先序和中序求后序遍历

代码如下&#xff1a; #include <iostream> using namespace std; const int N 1010; int pre[N], in[N], post[N];struct node {int w;node *l, *r;node (int w 0, node *l NULL, node *r NULL): w(w), l(l), r(r) {} };void build(int l, int r, int &t, node…

【朝夕技术专刊】Core3.1WebApi_Filter多种注册方式支持依赖注入

欢迎大家阅读《朝夕Net社区技术专刊》第5期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为忠实读者&#xff0c;文末福利不要错过哦&#xff01;01PARTCoreFilter多种注册方式在上一…

SQL(一)- 数据库介绍与基础操作

数据库介绍 一、常用的数据库分为两大类&#xff1a; 关系型数据库非关系型数据库&#xff08;NoSql&#xff09; 关系型数据库 概念&#xff1a;是建立在关系模型基础上的数据库&#xff0c;借助于集合代数等数学概念和方法来处理数据库中的数据。 关系型数据库的优势&am…

最少硬币问题-dp

题目&#xff1a; 有5种硬币&#xff0c;面值分别为&#xff1a;1,5,10,25,50。数量无限&#xff0c;输入非负整数s&#xff0c;选用硬币&#xff0c;使其和为s。要求输出最少的硬币组合要多少个硬币&#xff1f; 数据范围&#xff1a; s最大为250. 解题思路&#xff1a; 有时…

python加密与解密_Python加密与解密,pythonCrypt,和

from Crypto.Cipher import AESclass DeAesCrypt:"""AES-128-CBC 加/解密, Padding ZERO模式"""def __init__(self, data, key, pad):""":param data: 加密后的字符串,或者需要加密的字符串:param key: 随机的16位字符:param pad…

opencv +数字识别

现在很多场景需要使用的数字识别&#xff0c;比如银行卡识别&#xff0c;以及车牌识别等&#xff0c;在AI领域有很多图像识别算法&#xff0c;大多是居于opencv 或者谷歌开源的tesseract 识别.由于公司业务需要&#xff0c;需要开发一个客户端程序&#xff0c;同时需要在xp这种…

SQL(二)- 基础查询语句

简单的查询语句&#xff08;DQL&#xff09; 下面我们正式来学习查询语句&#xff0c;下面所有查询用到的表均为前面提到的三张表&#xff1a; 员工表中的数据&#xff1a; 部门表中的数据&#xff1a; 薪资表中的数据&#xff1a; 基本查询语句的语法&#xff1a; sele…

image 微信小程序flex_【微信小程序】flex布局一旦遇上for循环就失效

代码如下&#xff1a;wxml部分&#xff1a;{{item.name}}wxss部分&#xff1a;.skill .box {width: 100%;display: flex;flex-flow: row wrap;align-content: space-around;}.skill .skill-item {box-sizing: border-box;flex: 0 0 33.3333333333333%;font-size: 24rpx;color: …

SQL(三)- 连接查询

连接查询概念 一、什么是连接查询&#xff1f; 在实际开发中&#xff0c;大部分的情况下都不是从单张表中查询数据&#xff0c;一般都是多张表联合查询最终取出最终结果。在实际再发中&#xff0c;一般一个业务都会对应多张表&#xff0c;比如学生和班级&#xff0c;最起码两…

远程办公也可以很高效

题图&#xff1a;我的站立办公环境因为疫情&#xff0c;全中国人民都过了一个难忘的春节&#xff0c;而身在武汉的我&#xff0c;更是没有出家门半步&#xff0c;坚决做到不过国家添乱。从开始的2月14到后来的2月20日&#xff0c;再到现在的3月10日&#xff0c;官方发布的复工日…

github 检查代码质量_Android(8): 代码质量检查

代码质量检查是持续性的工作&#xff0c;检查的两个基本工具是FindBugs和CheckStyle。在实际项目中&#xff0c;检查的工作由测试人员实施&#xff0c;开发人员进行配合&#xff0c;形成日常性的工作。每天会对最新的代码进行检查&#xff0c;使用脚本(一般是测试用python写的)…

打印最少硬币的组合-dp+记录路径

题目&#xff1a; 有5种硬币&#xff0c;面值分别为&#xff1a;1,5,10,25,50。数量无限&#xff0c;输入非负整数s&#xff0c;选用硬币&#xff0c;使其和为s。要求输出最少的硬币组合的方案&#xff1f; 数据范围&#xff1a; s最大为250. 解题思路&#xff1a; 有时间再写…

SQL(四) - 子查询和union以及limit分页

子查询概念 什么是子查询&#xff1f;子查询都可以出现在哪里&#xff1f; select语句当中嵌套select语句&#xff0c;被嵌套的select语句是子查询。 子查询可以出现在哪里&#xff1f; select..(select). from..(select). where..(select).1.where子句中使用子查询 案例&a…

ASP.NET Core中的Http缓存

ASP.NET Core中的Http缓存Http响应缓存可减少客户端或代理对 web服务器发出的请求数。响应缓存还减少了 web服务器生成响应所需的工作量。响应缓存由 Http请求中的 header控制。而 ASP.NETCore对其都有相应的实现&#xff0c;并不需要了解里面的工作细节&#xff0c;即可对其进…