算法基础集训(第30天)------>DFS之经典【n皇后问题】

news2024/10/10 8:18:46

一:概念定义

n−皇后问题是指将 n个皇后放在 n×n的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。

二:题目描述

n−皇后问题是指将 n个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。

现在给定整数 n,请你输出所有的满足条件的棋子摆法。

输入格式

共一行,包含整数 n

输出格式

每个解决方案占 n 行,每行输出一个长度为 n 的字符串,用来表示完整的棋盘状态。

其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。

每个方案输出完成后,输出一个空行。

注意:行末不能有多余空格。

输出方案的顺序任意,只要不重复且没有遗漏即可。

数据范围

1≤ n ≤ 9

输入样例

4

输出样例

.Q..
...Q
Q...
..Q.

..Q.
Q...
...Q
.Q..

三:思路分析

按行枚举,很久n皇后的规则,分别需要三个数组【列数组,正斜率数组,负斜率数组】。也就是说,一个位置的元素存进去了,由于斜率已经确定了,故该元素所在直线的截距都确定了且是唯一的


四:万年无误代码模板(含详细解析)

#include <iostream>
using namespace std;
const int N = 200; 

// bool数组用来判断搜索的下一个位置是否可行
// col列,dg对角线,udg反对角线
// g[N][N]用来存路径

int n;
char g[N][N];
bool col[N], dg[N], udg[N];

void dfs(int u) {
    // u == n 表示已经搜了n行,故可以输出这条路径
    if (u == n) {
        for (int i = 0; i < n; i ++ ) puts(g[i]);   // 等价于cout << g[i] << endl;
        puts("");  // 换行
        return;
    }

    //对n个位置按行搜索
    for (int i = 0; i < n; i ++ )
        // 剪枝(对于不满足要求的点,不再继续往下搜索)  
        // u + i和n - u + i是截距
        // udg[n - u + i],+n是为了保证下标非负,因此加2n,3n也可以
        if (!col[i] && !dg[u + i] && !udg[n - u + i]) {
            g[u][i] = 'Q'; // 放入棋子
            col[i] = dg[u + i] = udg[n - u + i] = true; // 标记该位置已经放置过棋子了
            dfs(u + 1); // 递归下一行
            col[i] = dg[u + i] = udg[n - u + i] = false; // 恢复现场
            g[u][i] = '.';
        }
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i ++ )
        for (int j = 0; j < n; j ++ )
            g[i][j] = '.';

    dfs(0);

    return 0;
}   
创作不易,建议 点赞+收藏+关注,以免变成付费资源或者找不到宝贝文章了。
基础集训结束后将开展 拔高系列

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

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

相关文章

【C++入门】函数重载

目  录1 函数重载概念2 C支持函数重载的原理 -- 名字修饰&#xff08;name Mangling&#xff09;1 函数重载概念 函数重载&#xff1a; 函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功能类似的同名函数&#xff0c;这些同名函数的形参列表&#xff08;参数个数…

企企通入选「AI中国」机器之心“最具商业价值解决方案 TOP 30” 榜单

近日&#xff0c;由专业的人工智能信息服务平台机器之心&#xff0c;发起并评选的「AI 中国」机器之心2022 年度评选榜单正式公布&#xff0c;企企通凭借过去一年在采购供应链领域取得的成就&#xff0c;以及在技术、产品、服务能力方面具备的独特优势&#xff0c;从众多企业中…

Python连接Liunx中mysql数据库-三表查询【10个经典案例】

关于Python连接liunx中mysql数据库的方式在这一篇文章 Python连接Liunx中mysql数据库-保姆级教程 关于Python针对liunx中的mysql数据库进行增删改查操作的文章在这一篇可以看一下 Python连接Liunx中mysql数据库-增删改查 对于单表查询的学习可以看这一篇文章 Python对liunx中my…

使用.ibd文件恢复Mysql数据库数据

使用.ibd文件恢复Mysql数据库数据问题发现问题解决第一步&#xff1a;查找mysql数据目录第二步&#xff1a;创建表第三步&#xff1a;解除表空间第四步&#xff1a;复制原数据库.ibd文件第五步&#xff1a;导入表空间ERROR 1030 (HY000): Got error 194 “Tablespace is missin…

使用Navicat生成MySQL测试数据

使用Navicat生成MySQL测试数据 Navicat版本&#xff1a;16.1.3 场景&#xff1a;因为某些原因&#xff0c;本人负责项目的数据库需要从MySQL迁移到PostgreSQL&#xff0c;所以就想测试一下PostgreSQL数据库的分区表性能。测性能的话大概需要两千万的测试数据&#xff0c;从生…

蓝队--Linux基线安全检查

文章目录认证账号和口令安全创建用户用户安全基线授权文件系统安全审计日志安全日志存放的位置设备等级观察一条日志产生的过程网络安全网络协议与服务安全SSH的配置防火墙安全操作系统SELinux登陆安全kali忘记密码怎么办怎么物理加密进入BOIS界面选择Security选择set User Pas…

【前端】css样式视口、布局

一、 视口概念 视口&#xff08;viewport&#xff09;是用来约束网页中最顶级块元素的&#xff0c;即它决定了网页的大小&#xff0c;网页是先在视口上渲染&#xff0c;然后再通过视口放回到浏览器窗口上的&#xff0c;网页的渲染过程如下&#xff1a; pc端视口的大小和浏览器…

Python---类与对象

专栏&#xff1a;python 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本专栏主要更新一些python的基础知识&#xff0c;也会实现一些小游戏和通讯录&#xff0c;学时管理系统之类的&#xff0c;有兴趣的朋友可以关注一下。 类与对象前言定义类创建对象前言 面向对象跟函…

河北如何推进农村生活污水处理?

自“十四五”以来&#xff0c;我国各地都针对地方农村人居环境的改善颁布相关方案&#xff0c;力图改善农村生活污水处理这一自本世纪初就始终困扰我国广大农村居民的难题。今天&#xff0c;小编就为大家介绍一下&#xff0c;湖北省针对农村污水处理所采取的最新措施。 河北地…

统计图表有哪几个种类及其特点

关于数据分析中常用统计图表的分类和各种图表的特点&#xff0c;这一张图就能概括&#xff01; 下面来展开说下&#xff0c;为了直观展示&#xff0c;给大家找了一份可视化统计图表的模板&#xff0c;可直接在线使用&#xff0c;需要的小伙伴自取哈。 点此领取模板>>htt…

端口映射和端口转发

文章目录端口转发定义端口映射的定义端口转发简介常见转发工具LCX1、目标机有公网lP2、端口映射3、目标机无公网IP端口转发和端口映射都是为了解决内网主机的端口无法在外部直接访问而衍生出来的技术&#xff0c;通过中间服务器进行中转&#xff0c;将内部的端口映射到公网IP上…

【AI-NLP】Transformer理论及源码理解

文章目录提出背景总体结构EncoderDecoder细节再探源码阅读主函数部分主模型定义编码器编码层多头自注意力层前馈神经网络层Masked解码器解码层参考资料提出背景 改进了RNN的训练慢的缺点&#xff0c;利用self-attention机制实现并行计算。并且Transformer可以增加到非常深的深…

用css实现简易报警灯

主题 用css来实现一个简易的报警灯效果 实现效果 实现思路 实现的核心是一个灯罩和一个灯芯。灯罩主要是使用了border-radius圆角边框&#xff0c;灯芯主要是radial-gradient径向渐变。再使用动画效果来实现一闪一闪的效果。让我们来一步一步实现效果。 灯罩实现 因为大…

剑指Offer 第18天 I. 二叉树的深度 II. 平衡二叉树

目录 剑指 Offer 55 - I. 二叉树的深度 剑指 Offer 55 - II. 平衡二叉树 剑指 Offer 55 - I. 二叉树的深度 输入一棵二叉树的根节点&#xff0c;求该树的深度。从根节点到叶节点依次经过的节点&#xff08;含根、叶节点&#xff09;形成树的一条路径&#xff0c;最长路径的长度…

2025年突破百万套/年,又一个前装赛道成为行业新风口

汽车智能化&#xff0c;不仅仅是增量&#xff0c;还有存量升级。 作为驾驶员观察道路状况的关键车载部件&#xff0c;汽车后视镜&#xff08;基于凸面镜&#xff09;最早出现在1906年&#xff0c;随后逐步成为所有车辆的基本标配。不过&#xff0c;由于镜面设计的缺陷&#xf…

【ROS学习】节点运行管理launch文件的基本操作

launch文件的概念和作用 launch 文件是一个 XML 格式的文件&#xff0c;可以启动本地和远程的多个节点&#xff0c;还可以在参数服务器中设置参数。 launch文件的作用是&#xff1a;简化节点的配置与启动&#xff0c;提高ROS程序的启动效率。 使用场景 launch文件在ros中使用还…

mybatis中获取插入数组的主键值(自增主键,非增主键),mp

1.自增主键的第一种写法 <insert id"addKey" ><!--通过mybatis框架提供的selectKey标签获得自增产生的ID值--><selectKey resultType"java.lang.Integer" order"AFTER" keyProperty"id">select LAST_INSERT_ID()<…

【Azure 架构师学习笔记】-Azure Logic Apps(5)- 标准和使用量类型的区别

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Logic Apps】系列。 接上文【Azure 架构师学习笔记】-Azure Logic Apps&#xff08;4&#xff09;-演示2 前言 在做实验的过程中&#xff0c;发现使用“使用量”&#xff08;Consumption)类型会出现很多问题&#xff…

碰到个阿里p8,终于知道了别人为什么这么强,算是见识到了基础的天花板

基础不行一切都是浮云&#xff0c;想要建成高楼大厦&#xff0c;必需基础牢固 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山之石&#xf…

Pointet++ Tutorial

目录 .0 前言 .1 Contributions .2 Solutions 2.1 Set Abstraction&#xff08;SA&#xff09; .3 Structure of Network 3.1 Sample layer 3.2 group 3.3 PointNet layer 3.4 分类任务在提取特征后是怎么操作的&#xff0c;loss是什么 3.5 分割任务中如何进行上采…