N皇后问题12 · N-Queens

[抄题]:

n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。

给定一个整数n,返回所有不同的n皇后问题的解决方案。

每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。

对于4皇后问题存在两种解决的方案:

[

    [".Q..", // Solution 1

     "...Q",

     "Q...",

     "..Q."],

    ["..Q.", // Solution 2

     "Q...",

     "...Q",

     ".Q.."]

]

 [思维问题]:

看不懂特殊情况:主要是要区别x y

[一句话思路]:

DFS去掉特殊情况后画图

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. search函数可以是空类型,不返回search函数,返回其中的results即可。cols链表是后续函数的参数,此处需要新建链表。
  2. 如果辅助链表cols满了,需要在结果数组中添加画图,之后直接返回results。cols是数组,画成图才是链表
  3. drawCheesboard方法中,需要新建一个chessboard数组,作为最后返回的结果。 sb.append(j == cols.get(i) ? 'Q' : '.');表示j如果到达x有值处就打印Q
  4. 判断函数要有默认的return true 此函数判断的是cols,column是否有效,因此全部行通过后返回true

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

search函数用的DFS回溯是关键

[复杂度]:Time complexity: O(分支的深度次方) Space complexity: O(分支*深度)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

DFS:找出全部方法

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

Nqueen第二版,改参数不行 暂时算了吧

 [代码风格] :

  1. 规律:返回值和函数类型是相同的
class Solution {/*** Get all distinct N-Queen solutions* @param n: The number of queens* @return: All distinct solutions* For example, A string '...Q' shows a queen on forth position*/List<List<String>> solveNQueens(int n) {List<List<String>> results = new ArrayList<>();if (n <= 0) {return results;}search(results, new ArrayList<Integer>(), n);return results;}/** results store all of the chessboards* cols store the column indices for each row*/private void search(List<List<String>> results,List<Integer> cols,int n) {if (cols.size() == n) {results.add(drawChessboard(cols));return;}for (int colIndex = 0; colIndex < n; colIndex++) {if (!isValid(cols, colIndex)) {continue;}cols.add(colIndex);search(results, cols, n);cols.remove(cols.size() - 1);}}private List<String> drawChessboard(List<Integer> cols) {List<String> chessboard = new ArrayList<>();for (int i = 0; i < cols.size(); i++) {StringBuilder sb = new StringBuilder();for (int j = 0; j < cols.size(); j++) {sb.append(j == cols.get(i) ? 'Q' : '.');}chessboard.add(sb.toString());}return chessboard;}private boolean isValid(List<Integer> cols, int column) {int row = cols.size();for (int rowIndex = 0; rowIndex < cols.size(); rowIndex++) {if (cols.get(rowIndex) == column) {return false;}if (rowIndex + cols.get(rowIndex) == row + column) {return false;}if (rowIndex - cols.get(rowIndex) == row - column) {return false;}}return true;}
}
View Code

 

转载于:https://www.cnblogs.com/immiao0319/p/8410050.html

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

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

相关文章

python md5解密_python写一个md5解密器示例

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

L1-059 敲笨钟 (20 分)

题目截图如下,也可以跳转下方这个链接去pta平台自己测试一下: L1-059 敲笨钟 (20 分) 代码如下&#xff0c;部分关键注释已经在代码中标明: #include<bits/stdc.h> using namespace std; int main() {int n;string s;cin>>n;getchar(); //也可以使用cin.ignore()…

退出vim

退出vim命令 简单说明 :w保存编辑后的文件内容&#xff0c;但不退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中。 :w! 强制写文件&#xff0c;即强制覆盖原有文件。如果原有文件的访问权限不允许写入文件&#xff0c;例如&#xff0c;原有的文…

python解压加密zip文件_Python:解压缩前检测一个zip文件否为加密,两种算法。

前一篇文章介绍了如何用python自动解压缩加密的zip文件&#xff0c;但是有一个问题&#xff0c;在服务器端脚本在解加密zip文件之前&#xff0c;需要检测其是否是加密文件&#xff0c;若是&#xff0c;则询问密码&#xff0c;结合密码解压缩&#xff1b;如果不是&#xff0c;则…

web前端表格css三个t的使用(thead,tbody,tfoot)

其实从这三个词的翻译上&#xff0c;也可以知道他们的使用用途&#xff1a; thead&#xff08;表格头&#xff09;tbody&#xff08;表格主体&#xff09;tfoot &#xff08;表尾&#xff09; 话不多说&#xff0c;先上效果图: 具体使用看见代码演示: <html> <head…

HDU 2102 A计划

A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 26316 Accepted Submission(s): 6623 Problem Description可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后&#xff0c;而今&#xff0c;不幸的她再…

Vue框架之条件与循环的使用

如果是初学者的话&#xff0c;这里先给你一个基础知识的框图&#xff0c;可以了解一下下面代码的由来。 也可以选择我这个链接Vue条件与循环跳转到Vue官网进行学习。 上面是Vue的一个简单案例&#xff0c;不要急&#xff0c;进阶版来了&#xff0c;通过这个框架应用到你的表格…

git连接jenkins_开普勒云平台:如何配置gitlab与Jenkins

一、Kplcloud是什么?kplcloud是一个基于Kubernetes的轻量级PaaS平台&#xff0c;通过可视化的界面对应用进行管理&#xff0c;降低应用容器化的对度&#xff0c;从而减少应用容器化的时间成本。Kplcloud已在宜信服务于宜人财富等多个团队&#xff0c;稳定运行了近两年&#xf…

jQuery使用ajax跨域请求获取数据

jQuery使用ajax跨域请求获取数据跨域是我在日常面试中经常会问到的问题&#xff0c;这词在前端界出现的频率不低&#xff0c;主要原因还是由于安全限制(同源策略&#xff0c; 即JavaScript或Cookie只能访问同域下的内容)&#xff0c;因为我们在日常的项目开发时会不可避免的需要…

Eclipse查找文件存储路径

1.打开Eclipse&#xff0c;去找导航栏 2.点击file 3.点击properties 4.即可看到存储路径 5.可以点击存储路径找到该文件在电脑的储存位置 从此上传作业&#xff0c;找不到文件位置不再是烦恼。

专业对不对口重要吗_应届生求职,专业对口到底重不重要?

18年&#xff0c;智联招聘发布的《2018年大学生求职指南》显示&#xff0c;近四成毕业生就业岗位和在校专业不对口。同时&#xff0c;LinkedIn&#xff08;领英&#xff09;通过调查15万份用户档案分析发现&#xff0c;第一份工作的专业对口比例&#xff0c;95后只有28.8%。&am…

[原创]前端工作了一段时间经验总结,献给做前端的同学

一&#xff0c;编辑器的选择&#xff0c;推荐webstorm&#xff0c;绝对的神器。不要用dw了&#xff0c;它最骄傲的所见即所得其实没什么用&#xff0c;因为根本就不准&#xff0c;代码提示也不人性话&#xff0c;不方便。Webstorm的方便之处&#xff08;目前用到的&#xff09;…

Xml的使用

关于xml的学习入门&#xff0c;下面的就足够了 话不多说&#xff0c;先上图 主要注释已经附在了代码里&#xff1a; 这是独立执行的xml文件&#xff0c;未关联css和XSL文件&#xff0c;只会显示出一棵数据树。 至于详细的使用&#xff0c;我都附在了代码注释里&#xff0c;可以…

python工厂模式 理解_浅谈Python设计模式 - 抽象工厂模式

声明&#xff1a;本系列文章主要参考《精通Python设计模式》一书&#xff0c;并且参考一些资料&#xff0c;结合自己的一些看法来总结而来。在上一篇我们对工厂模式中的普通工厂模式有了一定的了解&#xff0c;其实抽象工作就是 表示针对工厂方法进一步抽象化&#xff0c;用于工…

RESTful API 设计指南

摘自:http://www.ruanyifeng.com/blog/2014/05/restful_api http://www.ruanyifeng.com/blog/2011/09/restful.html 网络应用程序&#xff0c;分为前端和后端两个部分。当前的发展趋势&#xff0c;就是前端设备层出不穷&#xff08;手机、平板、桌面电脑、其他专用设备......&…

C++中的位运算

最近在刷天梯题的时候&#xff0c;发现了<<和>>这两个运算&#xff0c;刚见到的时候简直一脸懵逼&#xff0c;觉得自己很菜&#xff0c;经过自己查找资料&#xff0c;发现原来这两个小东西是位运算符呀。为加深自己的印象&#xff0c;总结如下: 话不多说&#xff0…

node 更新_被创造者嫌弃,Node.js 如何应对来自 Deno 的挑战

(给前端大全加星标&#xff0c;提升前端技能)转自&#xff1a;OSC开源社区JavaScript 运行时 Node.js 于日前更新到了 15 版本&#xff0c;该软件自发布至今已走过了 11 年的岁月。但在今年 5 月&#xff0c;其竞争对手 Deno 也发布了 1.0 版本。Deno 是一个 Javascript/TypeS…

Python模块及其导入

一、模块 1、模块的定义&#xff1a; 为了编写可维护的代码&#xff0c;我们把很多函数分组&#xff0c;分别放到不同的文件里&#xff0c;这样&#xff0c;每个文件包含的代码就相对较少&#xff0c; 很多编程语言都采用这种组织代码的方式。在Python中&#xff0c;一个.py文件…

L1-046 整除光棍 (20 分)

这道题的解题过程真是一波三折&#xff0c;也真是发现人外有人&#xff0c;天外有天&#xff0c;好多神人真是。 原题如下图&#xff0c;也可点击这个链接到原题自己测试光棍原题链接: 一开始做的时候的想法&#xff1a;so easy&#xff0c;虽然看到了题目中提示s可能超级大…

python内存模型_内存篇3:CPython的内存管理架构-L2-块

本篇用到了C/C的内存对齐的基础知识&#xff0c;我已经假定你有C/C内存管理的相关基础。我们在前一篇的流程图中留下了两个黑箱子,会涉及到内存模型第一层以上的其他话题&#xff0c;回顾下面关于第一层面向类型的内存API流程执行图。本篇要讨论其中一个黑箱就是何为物&#xf…