N皇后C++非递归实现

时间: 2023-07-11 20:19:17 浏览: 57
以下是 N 皇后问题的 C++ 非递归实现代码,使用了迭代加深搜索算法: ```c++ #include <iostream> #include <cstring> using namespace std; const int N = 20; int n, ans; int col[N], dia[N], udia[N]; // 分别表示列、正对角线、反对角线是否被占用 int dfs() { int path[N], top = -1; memset(col, 0, sizeof col); memset(dia, 0, sizeof dia); memset(udia, 0, sizeof udia); int cnt = 0; // 记录当前摆放皇后的数量 for (int i = 0; i < n; i++) { path[++top] = i; // 将第一行皇后放在第 i 列 col[i] = dia[i + top] = udia[n - i + top] = 1; // 标记列、对角线 cnt++; } while (top >= 0) { int u = path[top--]; // 取出栈顶元素 cnt--; for (int i = u + 1; i < n; i++) { if (!col[i] && !dia[i - u + N] && !udia[n - i - u + N]) { path[++top] = i; col[i] = dia[i - u + N] = udia[n - i - u + N] = 1; cnt++; } } if (cnt == 0) ans++; // 摆放了 n 个皇后,答案加 1 while (top >= 0 && (top + n - u <= cnt)) { // 回溯 int j = path[top--]; col[j] = dia[j - u + N] = udia[n - j - u + N] = 0; cnt--; } } return ans; } int main() { cin >> n; cout << dfs() << endl; return 0; } ``` 这里的核心思想是使用栈来模拟回溯过程,每次将当前行可以放置皇后的列号入栈,在回溯时依次弹出栈顶元素,并将其对应的列、对角线解除标记。

相关推荐

最新推荐

recommend-type

C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法

主要介绍了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法,涉及C++二叉树的定义、遍历、统计相关操作技巧,需要的朋友可以参考下
recommend-type

C++递归算法实例代码

主要介绍了C++递归算法实例代码,还是比较不错的,运用了递归算法解决相关问题,这里分享给大家,需要的朋友可以参考下。
recommend-type

C++ 数据结构二叉树(前序/中序/后序递归、非递归遍历)

主要介绍了C++ 数据结构二叉树(前序/中序/后序递归、非递归遍历)的相关资料,这里提供实例代码来帮助大家理解掌握二叉树,需要的朋友可以参考下
recommend-type

C++实现新年贺卡程序

主要为大家详细介绍了C++实现贺卡程序,C++应用程序编写的雪花贺卡,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C++简单集合类的实现方法

如何使用C++实现一个简单的集合类,这篇文章主要介绍了C++简单集合类的实现方法,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

机器学习怎么将excel转为csv文件

机器学习是一种利用计算机算法和统计数据的方法来训练计算机来进行自动学习的科学,无法直接将excel文件转为csv文件。但是可以使用Python编程语言来读取Excel文件内容并将其保存为CSV文件。您可以使用Pandas库来读取Excel文件,并使用to_csv()函数将其保存为CSV格式。以下是代码示例: ```python import pandas as pd # 读取 Excel 文件 excel_data = pd.read_excel('example.xlsx') # 将数据保存为 CSV 文件 excel_data.to_csv('example.csv', index=
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。