【计算机算法设计与分析】n皇后问题(C++_回溯法)

news2025/6/9 6:31:05

文章目录

    • 题目描述
    • 测试样例
    • 算法原理
    • 算法实现
    • 参考资料

题目描述

在nxn格的棋盘上放置彼此不受攻击的n格皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在nxn格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。

当n=6时,一个如下的 6×6 的跳棋棋盘:

在这里插入图片描述

上面的布局可以用序列 2 4 6 1 3 5 来描述,第 i 个数字表示在第 i 行的相应位置有一个棋子。这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。并把它们以上面的序列方法输出,解按字典顺序排列。请输出前三个解。最后一行是解的总个数。

测试样例

输入:

6

输出:

2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4

算法原理

       使用回溯法对解空间进行深度优先搜索遍历,同时要满足规则(任何两个皇后不放在同一行或同一列或同一斜线上),为节省时间我创建了四个数组:x[1000], y[1000], zr[1000], zl[1000],分别存储横轴、纵轴、左对角线、右对角线上是否已被占用的信息。其中,x[i]=j表示在第i行第j个位置放置一个皇后(方便输出结果);y[j]=1表示第j列已被占用;zr[i - j + n]=1表示这条从左上到右下的对角线已被占用(所有处于同一条左上到右下对角线上元素的横坐标减纵坐标都相同,为了让索引为正,所以加n);zl[i+j]=1表示这条从右上到左下的对角线已被占用(所有处于同一条右上到左下对角线上元素的横坐标加纵坐标都相同)。

算法实现

#include<bits/stdc++.h>
using namespace std;

int n, num = 0;
int x[1000], y[1000], zr[1000], zl[1000];
void print()
{
	if (num < 3)
	{
		for (int i = 1; i <= n; i++)
			cout << x[i] << " ";
		cout << endl;
	}
	num++;
}
void dfs(int i)
{
	if (i > n)
	{
		print();
		return;
	}
	else
	{
		for (int j = 1; j <= n; j++)
		{
			if ((!y[j]) && (!zr[i - j + n]) && (!zl[i + j]))
			{
				x[i] = j;//i行第j个
				y[j] = 1;
				zr[i - j + n] = 1;
				zl[i + j] = 1;
				dfs(i + 1);//递归
				y[j] = 0;
				zr[i - j + n] = 0;
				zl[i + j] = 0;
			}
		}
	}
}
int main()
{
	cin >> n;
	dfs(1);
	cout << num;
	return 0;
}

参考资料

回溯法之n皇后问题总结_用回溯法求解n皇后问题的思路

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

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

相关文章

char 和 varChar 的区别是什么?

大家好&#xff0c;我是伯约&#xff0c;这篇对大家有帮助的话求一个赞&#xff0c;另外文章末尾放了我从月入7k到现在3W的学习资料&#xff0c;大家可以去领一下&#xff08;无偿&#xff09;。 CHAR 和 VARCHAR 是最常用到的字符串类型&#xff0c;两者的主要区别在于&#x…

区域HIS系统源码,二级医院、专科医院his系统源码,经扩展后能够应用于医联体/医共体

二级医院、专科医院his系统源码&#xff0c;java语言开发 基于云计算技术的B/S架构的HIS系统&#xff0c;为医疗机构提供标准化的、信息化的、可共享的医疗信息管理系统&#xff0c;实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。 系统利用云计算平台的技术优…

Golang 通用代码生成器仙童已发布 2.4.0 电音仙女尝鲜版三及其介绍视频,详细介绍了 Oracle 代码生成

Golang 通用代码生成器仙童已发布 2.4.0 电音仙女尝鲜版三及其介绍视频&#xff0c;详细介绍了 Oracle 代码生成 Golang 通用代码生成器仙童已发布 2.4.0 电音仙女尝鲜版三及其介绍视频。详细介绍了 Oracle 代码生成。即生成后端数据库为 Oracle 的 golang web 代码。并同时生…

Flask入门教程

Flask入门教程 简介 Flask是由Armin ronacher于2010年用Python语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。 特点 Flask只提供核心功能&#xff0c;其他几乎所有的功能都需要用到拓展&#xff0c;比如可以通过Flask-SQLAlchemy拓展对数据库进行操作等等。 核心 由…

vue3 require is not defined

前言&#xff1a;我想在vue3项目的页面引入图片总是不成功&#xff0c;最后看到说是Vite在作祟&#xff0c;让我来瞧瞧&#xff0c;是怎么回事咧。 看看官方文档怎么说Vite官网地址 主要是 new URL(url, import.meta.url) import.meta.url 是一个 ESM 的原生功能&#xff0c;…

redis 三主六从高可用dockerswarm高级版(不固定ip)

redis集群(cluster)笔记 redis 三主三从高可用集群docker swarm redis 三主六从高可用docker(不固定ip) redis 三主六从高可用dockerswarm高级版(不固定ip) 此博客解决&#xff0c;redis加入集群后&#xff0c;是用于停掉后重启&#xff0c;将nodes.conf中的旧的Ip替换为新的…

[C#]使用onnxruntime部署yolov8-onnx实例分割模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 是一个 SOTA 模型&#xff0c;它建立在以前 YOLO 版本的成功基础上&#xff0c;并引入了新的功能和改进&#xff0c;以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新…

vscode无识别已有的maven java项目(visual studio code not recognizing java project)

文章目录 事情经过尝试疑惑问题解决结论 事情经过 未安装任何Java Extension Pack使用 Maven 的 archetype:generate 命令来创建一个新的项目使用vscode打开了该目录然后安装Java Extension Pack等java插件配置了vscode settings.json中的 java.configuration.runtimes和 java…

day58算法训练|单调栈part01

参考&#xff1a;代码随想录 单调栈的使用情况&#xff1a; 通常是一维数组&#xff0c;要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置&#xff0c;此时我们就要想到可以用单调栈了。时间复杂度为O(n)。 单调栈的本质是空间换时间&#xff0c;因为在遍历…

cpolar-内网穿透

目录 一、打开网址注册账号 二、下载客户端 三、创建 四、测试 一、打开网址注册账号 coplar官网 二、下载客户端 登录成功后会跳转该页面 三、创建 双击打开 设置名称、要投射的本地端口号、默认为http协议 点击隧道列表&#xff0c;然后点击启动 选择公网地址就可以访问…

「实战应用」如何用DHTMLX Gantt构建类似JIRA式的项目路线图(一)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 在web项目中使用DHTMLX Gantt时&#xff0c;开发人员经常需要满足与UI外观相关的各种需求。因此他们必须确定JavaScript甘特图库的…

UI5与后端的文件交互(三)

文章目录 前言一、开发Action1. 修改Table2. BDEF中新增Action3. 新建结构&#xff0c;用于接收uuid以及附件数据4. 实现Method逻辑 二、UI5项目修改1. 添加表格行2. 事件处理函数3. 点击文件名时的事件 三、测试 前言 这系列文章详细记录在Fiori应用中如何在前端和后端之间使…

Pikachu--数字型注入(post)

Pikachu--数字型注入&#xff08;post&#xff09; 进入页面 输入 127.0.0.1/pikachu 选择sql注入&#xff08;数字型&#xff09; 2&#xff09;打开foxy代理&#xff0c;输入值“1”进行bp抓包 3&#xff09;将这个获取的包转发到Repeater中 判断注入点 4&#xff09;用单…

光耀未来 第一届能源电子产业创新大赛太阳能光伏赛道决赛在宜宾举行

1月3日&#xff0c;第一届能源电子产业创新大赛太阳能光伏赛道决赛在宜宾盛大举行&#xff0c;本次比赛吸引了全国范围内的光伏行业顶尖人才和创新团队参与。 为深入贯彻《关于推动能源电子产业发展的指导意见》&#xff0c;推动我国能源电子产业升级&#xff0c;工业和信息化部…

每日算法打卡:递归实现组合型枚举 day 4

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 题目分析示例代码优化 原题链接 93. 递归实现组合型枚举 题目难度&#xff1a;简单 题目来源&#xff1a;《算法竞赛进阶指南》 题目描述 从 1∼n 这 n 个整数中随机选出 m 个…

电动汽车BMS PCB制板的技术分析与可制造性设计

随着电动汽车行业的迅猛发展&#xff0c;各大厂商纷纷投入巨资进行技术研发和创新。电动汽车的核心之一在于其电池管理系统&#xff08;Battery Management System, BMS&#xff09;&#xff0c;而BMS的心脏则是其印刷电路板&#xff08;PCB&#xff09;。通过这篇文章探讨电动…

百度Apollo:激光雷达检测技术深度解析

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…

prometheus grafana nginx 安装配置和使用

文章目录 前传prometheus exporter容器监控nginxnginx需要加载stub_status监控查看有没有&#xff0c;如果有&#xff0c;去配置下nginx重要&#xff0c;需要重启nginx测试监控是否成功 prometheus中添加nginx-exporter配置 grafana外传 前传 prometheus grafana的安装使用&am…

防爆气象站跟传统气象站相比有哪些优势?

防爆气象站是一种特殊的气象站&#xff0c;设计用于在易燃易爆、高温、潮湿等恶劣环境下进行气象监测。以下是防爆气象站的优点&#xff1a; 防爆性能&#xff1a;防爆气象站能够承受极端恶劣的环境条件&#xff0c;可以在易燃易爆、高温、潮湿等危险环境下进行工作&#xff0…

企业无法处理海量的大文件,FTP不可靠该如何进行替代?

FTP是一项标准协议&#xff0c;用于在网络中进行文件传输&#xff0c;最早于1971年问世&#xff0c;被认为是互联网的基石之一。FTP可在不同操作系统和网络环境下实现文件上传和下载&#xff0c;具备方便、迅速和高效的特性&#xff0c;广泛应用于网站建设、软件更新、数据备份…