DFS-4-N皇后问题

news/2024/4/27 9:21:56/文章来源:https://blog.csdn.net/weixin_52972575/article/details/127674545

规则

每一行,每一列,每一上对角线和下对角线都只能放一个皇后。

题目

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

输入样例:

4

输出样例:

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

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

注意点

如何利用行号和列号确定是哪条对角线?

上对角线

判断一条对角线上元素之间的联系,上对角线上的每一个元素的行号减去列号是相等的

y=x+b,   b=y-x,凡是在这条线上的相加都等于b,由于棋盘的坐标变化和坐标轴不同,这里大概理解一下含义,同时为了避免负数的存在,则加上n(棋盘的大小)。

下对角线

思路

每个行搜索一个元素,直到搜索完每一行后进行输出,即深度优先搜索。

在第一行任意选取一个数,然后做标记,即给第二行的选择限定了条件,依次往下搜索。

如果不满足条件,就无法执行dfs(u+1),也就无法再深入搜索,最后输出满足深度要求的答案。

代码

#include<iostream>
using namespace std;
const int N = 20;
int n;
char chess[N][N];
bool col[N],dg[2*N],udg[2*N]; //列,上对角线,下对角线   行号-列号+n    行号+列号 //初始化棋盘
void init(){for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)chess[i][j] = '.';
}void dfs(int u){//不满足列或对角线的条件if(u > n){for(int i = 1; i <=n; i++){for(int j = 1; j <= n; j++)cout << chess[i][j] << " ";cout << endl;}cout << endl;return;}	for(int i = 1; i <= n; i++){if(!col[i] && !dg[n+u-i] && !udg[u+i-1]){chess[u][i] = 'Q';col[i] =dg[n+u-i]= udg[u+i-1] =  true;dfs(u+1);//恢复现场col[i] =dg[n+u-i]= udg[u+i-1] =  false;chess[u][i] = '.';}}
}int main(){cin >> n;init();dfs(1);	
}

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

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

相关文章

【机考】华为OD2022.11.01机考题目思路与代码

题目一 描述 输入一个长度为4的倍数的字符串&#xff0c;字符串中仅包含WASD四个字母。 将这个字符串中的连续子串用同等长度的仅包含WASD的字符串替换&#xff0c;如果替换后整个字符串中WASD四个字母出现的频数相同&#xff0c;那么我们称替换后的字符串是“完美走位”。 …

【linux】shell脚本 循环 echo输入输出 函数 shell调试

1.循环 for/do/done shell脚本的for循环结构和C语言不一样&#xff0c;它类似于某些编程语的foreach循环。 #!/bin/bash for FRUIT in apple banana pear; doecho "I like $FRUIT" doneFRUIT&#xff08;可自定义变量&#xff09;是一个循环变量&#xff0c;第一次循…

如何发表计算机SCI或者EI论文? - 易智编译EaseEditing

首先是期刊的选择 1、期刊档次 自己文章的水平自己应该是非常清楚的&#xff0c;也可以请导师帮忙评估文章的创新性和研究价值&#xff0c;选定一个适合文章发表的期刊范围。 2、期刊的领域偏好 不同的期刊尽管有时已经给出了自己的发表文章的领域&#xff0c;但是你只要认真…

python基于PHP+MySQL的在线音乐点歌系统

音乐是人们永恒的追求。自古有以来就有语音绕梁三日的佳话,由此几千年来我国人民对音乐的重视程度。为了让音乐得到更好的传播,让更多的人能够听到美妙的音乐。我们开发了PHP在线音乐点歌系统 PHP在线音乐点歌系统是一个音乐爱好者的乐土,本系统采用PHP&#xff1a;MySQL进行开…

Android开发使用Room(SQLite封装)操作数据库

一、Room介绍 Android采用Sqlite作为数据库存储。Sqlite代码写起来繁琐且容易出错&#xff0c;所以开源社区里逐渐出现了各种ORM&#xff08;Object Relational Mapping&#xff09;库。这些开源ORM库都是为了方便Sqlite的使用&#xff0c;包括数据库的创建&#xff0c;升级&am…

【计组 期末版】1.计算机系统概论(一)勇闯期末考试

【计组 期末版】1.计算机系统概论&#xff08;一&#xff09;搞定期末 前言 博主主页&#xff1a;潮.eth的博客_CSDN博客-C学习,C学习,数据结构and算法领域博主 文章目录&#xff1a;【计组 期末版】计算机组成原理笔记目录 正文 文章目录【计组 期末版】1.计算机系统概论&…

Java NIO 关键概念之 Buffer

一、前言 Java NIO 的三大关键概念之一是 Buffer&#xff0c;在一些文章/源代码中&#xff0c;我们也经常会看到 Buffer 相关的信息。Buffer 到底是什么&#xff0c;Buffer 的基本使用方法是什么&#xff0c;这是本文主要要说的。 二、Buffer 的基本概念 Buffer自 JDK1.4 引…

快速教你如何搭建数据驱动自动化测试框架?

一、前言 说到数据驱动自动化测试&#xff0c;你会不会有这样的疑问&#xff1a;数据怎么管理&#xff1f;数据怎么才能驱动测试用例执行&#xff1f;到底怎么样才算数据驱动&#xff1f;那么本篇文章就教你如何进行数据驱动测试&#xff0c;相信你一定能对数据驱动自动化测试…

拓端tecdat|R语言向量自回归模型(VAR)及其实现

全文链接&#xff1a;http://tecdat.cn/?p6916 原文出处&#xff1a;拓端数据部落公众号 澳大利亚在2008 - 2009年全球金融危机期间发生了这种情况。澳大利亚政府发布了一揽子刺激计划&#xff0c;其中包括2008年12月的现金支付&#xff0c;恰逢圣诞节。因此&#xff0c;零售…

巧妙使用多个旧路由器无线中继提升网络速度

巧用多个路由器进行无线桥接或无线中继&#xff0c;提升网络速度 一、设备选择 1、百兆旧路由器&#xff0c;3-4个&#xff0c;用于无线中继WIFI信号&#xff0c;输出给多WAN路由器&#xff08;DI-8200&#xff09; 历史遗留百兆旧路由器3个&#xff0c;型号分别为腾达FH456…

3、用手机模拟器上的Autojs连接电脑vscode

文章目录1、下载模拟器2、在模拟器上安装Autojs3、连接vscode1、下载模拟器 这里推荐雷电模拟器 https://www.ldmnq.com/?n6005 2、在模拟器上安装Autojs 3、连接vscode 打开autojs打开侧边栏&#xff0c;然后选择连接电脑&#xff0c;打开服务器模式然后复制这个IP地址 4.…

浅谈 Mybatis 动态数据源切换是如何实现的

前言 小憩是辣么的让人神往&#xff0c;就像备战高考靠窗位置的那个你&#xff0c;肆无忌道的放空自己&#xff0c;望着深蓝色宁静的天空&#xff0c;思考着未来该何去何从&#xff0c;近处一颗高大魁梧的银杏树在炎炎夏日中尽情的摇曳着自己嫩绿的枝丫&#xff0c;迸发出无尽的…

计算机毕业设计ssm+vue基本微信小程序的高速公路服务区充电桩在线预订系统 uniapp 小程序

项目介绍 随着网络技术的发展,当前人们的生活模式发生了巨大的变化,特别是以电子商务为代表的产业影响了人们的生活。当前,电子商务成为振兴国家经济的重要手段,电子商务为人们的生活提供了极大的便利,帮助企业降低销售成本,提高销售效率。高速公路服务区作为传统的实体行业,经…

BGP BFD测试案例

一、BFD原理 1.1 BFD技术简介 一种全网统一、检测迅速、监控网络中链路或者IP路由的双向转发连通状况&#xff0c;并未上层应用提供服务的技术。 1.2 BFD会话建立方式和监测机制 ●BFD的标识符&#xff1a; &#xff08;1&#xff09;BFD建立会话存在标识符的概念&#xff…

中小企业数字化思考:数字化转型应该走自己的路

随着数字化的发展&#xff0c;以及数字中国概念的形成&#xff0c;和以前国央企宣布数字化转型时的不同&#xff0c;现在越来越多的企业开始寻求数字化转型&#xff0c;促使自身业务能够更好的发展。现在看过去&#xff0c;各行各业都有大量企业进行了数字化转型规划&#xff0…

【Mac】VSCode 更新1.73版本后JSTS代码跳转异常

前言 今天有小伙伴MacOS更新了VS Code版本后&#xff0c;说工程内的代码跳转全部异常了&#xff0c;没法正确跳转。搞了两三个小时没搞出来&#xff0c;找到了我&#xff0c;让我帮忙瞧瞧。排查下来发现这问题有点意思&#xff0c;故此记录一下。 问题 排查姿势 1. 提示没有定…

Skywalking9.2.0监控浏览器

Skywalking9.2.0监控浏览器 安装skywalking-client-js npm install skywalking-client-js --save在main.js添加信息 import ClientMonitor from skywalking-client-jsrouter.afterEach(() > {ClientMonitor.setPerformance({service: 服务名,serviceVersion: 版本号,pagePat…

基于模糊小波神经网络的空中目标威胁评估(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 在现代战争中, 随着信息化和智能化的飞速发展, 以及作战环境的日益复杂, 实时而准确地评估目标威胁, 不仅为空战决策提供科学的…

程序人生:技术水平低,就这还敢写自动化项目实战经验丰富?

今年部门要招两个自动化测试&#xff0c;这几个月我面试了几十位候选人。发现一个很奇怪的现象&#xff0c;面试中一问到元素定位、框架api、脚本编写之类的&#xff0c;很多候选人都对答如流。但是一问到实际项目&#xff0c;比如 “如何从0开始搭建自动化体系”、“如果让你来…

资深大牛纯手写RabbitMQ 核心笔记,还有谁?

RabbitMQ简介 RabbitMQ是消息代理(Message Broker)&#xff0c;它支持多种异步消息处理方式&#xff0c;最常见的有&#xff1a; Work Queue&#xff1a;将消息缓存到一个队列&#xff0c;默认情况下&#xff0c;多个worker按照Round Robin的方式处理队列中的消息。每个消息只…