[C++][算法基础]n-皇后问题(DFS)

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

1_597ec77c49-8-queens.png

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

输入格式

共一行,包含整数 n。

输出格式

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

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

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

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

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

数据范围

1≤n≤9

输入样例:
4
输出样例:
.Q..
...Q
Q...
..Q...Q.
Q...
...Q
.Q..

代码:

#include<iostream>
using namespace std;const int N = 20;
char path[N][N];
int row[N],k[N],uk[N];
int n;void dfs(int now){if(now == n){for(int p = 0;p<n;p++){for(int q = 0;q<n;q++){cout<<path[p][q];}cout<<endl;}cout<<endl;}else{for(int j = 0;j<n;j++){if(row[j] == 0 && k[j + now] == 0 && uk[n+j-now] == 0){row[j] = 1;k[j + now] = 1;uk[n+j-now] = 1;path[now][j] = 'Q';dfs(now+1);row[j] = 0;k[j + now] = 0;uk[n+j-now] = 0;path[now][j] = '.';}}}
}int main(){cin>>n;for(int p = 0;p<n;p++){for(int q = 0;q<n;q++){path[p][q] = '.';}row[p] = 0;k[p] = 0;uk[p] = 0;}dfs(0);return 0;
}

 

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

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

相关文章

android 源码环境配置

如何配置自己的源码调试环境 1 编译源码 repo sync -j8 --fail-fast .build/envsetup.sh lunch 选73 make -j8 emulator 2 配置android studio sudo apt install openjdk-9-jre-headless //安装java https://developer.android.google.cn/studio//下载studio 解压后打开bin里…

APP开发教学:开发同城O2O外卖跑腿系统源码详解

同城O2O外卖跑腿系统&#xff0c;满足了人们对于外卖送餐和生活服务的需求。今天&#xff0c;小编将为您讲解如何开发同城O2O外卖跑腿系统源码。 1.前期准备 首先&#xff0c;我们需要明确系统的功能需求和用户需求&#xff0c;包括外卖订购、配送员接单、支付功能等。其次&am…

matlab多核程序如何共享内存和数据

在MATLAB中&#xff0c;多核程序共享内存和数据主要依赖于MATLAB的并行计算工具箱&#xff08;Parallel Computing Toolbox&#xff09;。这个工具箱提供了多种机制来在多个工作进程&#xff08;workers&#xff09;之间共享数据&#xff0c;这些工作进程可能运行在同一台机器的…

MySQL、Maria数据库用户管理(创建、修改、删除用户)常用操作

一. 前言 MySQL 在安装时&#xff0c;会默认创建一个名为 root 的用户&#xff0c;该用户拥有超级权限&#xff0c;可以控制整个 MySQL 服务器。 在对 MySQL 的日常管理和操作中&#xff0c;为了避免有人恶意使用 root 用户控制数据库&#xff0c;我们通常创建一些具有适当权…

(78)删除有序数组中的重复项(79)排序矩阵查找

文章目录 1. 每日一言2. 题目(78)删除有序数组中的重复项2.1 解题思路2.2 代码 3. 题目(79)排序矩阵查找3.1 解题思路3.1.1 暴力查找暴力查找代码 3.1.2 二分查找二分查找代码 3.1.3 贪心贪心代码 4. 结语 1. 每日一言 水晶帘动微风起&#xff0c;满架蔷薇一院香。 —高骈- 2.…

minio-docker单节点部署SDK测试文件上传下载

目录 一&#xff0c;docker部署minio单节点单磁盘 二&#xff0c;SDK测试上传下载 一&#xff0c;docker部署minio单节点单磁盘 1.拉取镜像 # 下载镜像 docker pull minio/minio 2.查看镜像 docker images 3.启动minio(新版本) 创建本机上的挂载目录&#xff0c;这个可以…

Java中Runnable和Callable有什么不同?(企业真题)

Java中Runnable和Callable有什么不同&#xff1f; 与之前的方式的对比&#xff1a;与Runnable方式的对比的好处 call()可以有返回值&#xff0c;更灵活 call()可以使用throws的方式处理异常&#xff0c;更灵活 Callable使用了泛型参数&#xff0c;可以指明具体的call()的返回值…

NetSuite 销售订单页面选择客户后停滞问题研究

随着用户环境中定制内容的增加&#xff0c;用户会发现Sales Order中选择Customer时的页面停滞时间会变长。这让用户感到很疑惑。 我们初步研究了一下这个问题&#xff0c;两个变量比较显著&#xff1a; •Form的页签数量•脚本的挂载数量 试验数据 1. 多页签&#xff0c;无…

二维相位解包理论算法和软件【全文翻译- 非加权多网格算法解包裹(5.3.3)】

5.3.3 非加权多网格算法 在本节中,我们将介绍第四种非加权最小二乘相位解包算法。与前三种算法不同,这是一种迭代算法,是第 5.4 节介绍的加权最小二乘相位解包多网格技术的基础。本节开始将详细介绍多网格方法,包括典型多网格算法的伪代码。由于多网格算法是以递归方式自然…

潍微科技-水务信息管理平台 ChangePwd SQL注入漏洞复现(CNVD-2024-14945)

0x01 产品简介 水务信息管理平台主要帮助水务企业实现水质状态监测、管网运行监控、水厂安全保障、用水实时监控以及排放有效监管,确保居民安全稳定用水、环境有效保护,全面提升水务管理效率。由山东潍微科技股份有限公司研发,近年来,公司全力拓展提升水务、水利信息化业务…

nginx工作原理解析

目录 1、master-workers 的工作机制介绍 2、master-workers 的机制的好处 3、设置多少个 worker 4、最大连接数和支持的最大并发数的计算 1、master-workers 的工作机制介绍 nginx在启动后&#xff0c;会有一个master进程和一个或者多个相互独立的worker进程 过来的请求由…

数字化时代:IT界的致富秘籍 —— 策略×态度×机遇

&#x1f31f; 数字化时代&#xff1a;IT界的致富秘籍&#x1f680; —— 策略态度机遇 在数字化浪潮中冲浪&#x1f3c4;‍♂️&#xff0c;IT行业犹如一片无限可能的蓝海。想要在这片汹涌的海洋中捕获财富&#xff0c;不是一件轻而易举的事。让我们一起深入探索&#xff0c;如…

对给定向量旋转

对给定向量旋转 顺时针&#xff1a; 逆时针&#xff1a; 源码&#xff1a; QPointF rotateVector(const QPointF& dir, double angle, bool flag){double rad (angle * M_PI) / 180;QPointF res;if (flag){float x static_cast<float>(dir.x() * std::cos(rad) …

redisson实现的分布式锁是可重入的吗?

首先理解可重入锁&#xff1a; 可重入锁&#xff0c;又叫做递归锁&#xff0c;是指在同一个线程在外层方法获取锁的时候&#xff0c;再进入该线程的内层方法会自动获取锁&#xff08;前提是同一个对象或者class&#xff09;&#xff0c;不会因为之前已经获取过锁而导致锁的阻塞…

网络知识 | IP地址与MAC地址,TCP三次握手与四次挥手

IP地址与MAC地址 MAC地址&#xff08;Media Access Control Address&#xff09;&#xff0c;又称物理地址&#xff0c;用来标识网络中的设备&#xff0c;出厂时由生产网商写到网卡的BIOS中&#xff0c;具有唯一性&#xff0c;不可更改。 IP地址&#xff08;Internet Protoco…

日期统计(蓝桥杯)

文章目录 日期统计问题描述答案&#xff1a;235回溯算法暴力枚举 日期统计 问题描述 小蓝现在有一个长度为 100 的数组&#xff0c;数组中的每个元素的值都在 0 到 9 的范围之内。数组中的元素从左至右如下所示&#xff1a; 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 …

【2024年5月备考新增】《软考真题分章练习(含答案解析) - 17 管理科学-运筹学基础 (1)》

管理科学-运筹学基础 1、小李作为项目经理需要从以下四个项目方案中选择项目,已知项目周期均为 2 年且期初投资额都是30.000 元,折现均为 10%。项目情况如下: 方案 A:第一年现金流为 14,000 元,第二年现金流 19,000 元 方案 B:第一年现金流为 23,000 元,第二年现金流…

rust学习笔记

一、常用trait Clone&Copy pub trait Clone: Sized {fn clone(&self) -> Self; }pub trait Copy: Clone { } Clone Copy let y x;let y x.clone();发生移动编译报错√发生移动发生拷贝√√发生拷贝发生拷贝 Clone&#xff1a;可以理解为深拷贝&#xff0c;例如…

【前端】layui table表格勾选事件,以及常见模块

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 表格勾选事…

java基础-chapter16(动态代理)

动态代理 特点&#xff1a;无侵入式的给代码增加额外的功能 在Java中&#xff0c;动态代理是一种在运行时动态生成代理对象的机制&#xff0c;而不需要在编译时确定代理类。它允许在运行时创建一个实现了一组特定接口的代理类&#xff0c;这些代理类可以将方法调用转发到实际…