LeetCode—51. N 皇后(困难)

51. N 皇后(困难)

题目描述:
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击,即令其中任意两个皇后都不同列、同行和在一条斜线上。

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

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
在这里插入图片描述

在这里插入图片描述

考察重点:需要找出所有情况,应立刻想到DFS,同时为了方便查找,使用二维数组代替链表进行遍历。使用isLegal()函数判断斜边,列是否存在Queen;DFS按行进行递归,每次在当前行,寻找合法的列插入Queen,并进入下一行。最终当递归到最后一行+1时,说明当前分布满足条件,加入结果链表list。

List<List<String>>  list;
public boolean isLegal(char map[][], int x, int y){for(int i = 0;i < map.length;i ++){if(map[i][y] != '.')return false;}for(int i = 1;i < map.length;i ++){if(x+i < map.length && y+i <map.length && map[x + i][y + i] != '.')return false;if(x-i >= 0 && y-i >= 0 && map[x - i][y - i] != '.')return false;if(x+i < map.length && y-i >= 0 && map[x + i][y - i] != '.')return false;if(x-i >= 0 && y+i < map.length && map[x - i][y + i] != '.')return false;}return true;
}
public int dfs(char[][] map, int x){if(!(x < map.length)){List<String> single = new ArrayList<>();for(int i = 0;i < map.length;i ++)single.add(String.valueOf(map[i]));list.add(single);return 0;}for(int y = 0;y < map.length;y ++){if(isLegal(map, x, y)) {map[x][y] = 'Q';dfs(map, x + 1);map[x][y] = '.';}}return 0;
}
public List<List<String>> solveNQueens(int n) {list = new ArrayList<>();char[][] map = new char[n][n];for(int i = 0;i < n;i ++)for(int j = 0;j < n;j ++)map[i][j] = '.';dfs(map, 0);return list;
}

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

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

相关文章

使用javasript 遍历页面CheckBox

使用javasript 遍历页面CheckBox<html><head><script>function aaa(){var result"";for(var i0;i<checkform.checkboxlist.length;i){if(checkform.checkboxlist[i].checked){alert(checkform.checkboxlist[i].value);}else{……文章来源:http:…

unity 角色换装

unity角色换装的关键是更改角色部位上的物体的SkinnedMeshRenderer组件的属性&#xff1a; 更改mesh:mesh决定了部位的物体的外形&#xff0c;是主要的数据。 刷新骨骼&#xff1a;同一个部位下&#xff0c;不同的mesh受到的不同的骨骼的影响不同&#xff0c;因此更换mesh之后&…

Hadoop:pig 安装及入门示例

pig是hadoop的一个子项目&#xff0c;用于简化MapReduce的开发工作&#xff0c;可以用更人性化的脚本方式分析数据。 一、安装 a) 下载 从官网http://pig.apache.org下载最新版本(目前是0.14.0版本)&#xff0c;最新版本可以兼容hadop 0.x /1.x / 2.x版本&#xff0c;直接解压到…

SQL DISTINCT 多字段查询用法

使用distinct 的困惑: 我现在有一个表book有两个字段 作者 作品 auther article 记录值如下 张三 作品一 李四 作品二 张三 作品三 张三 作品四 李四 作品五 王五 作品六 我现在想读取每位作者的代表作和作者姓名 也就是如下数据 张三 作品一 李四 作品二 王五 作品六 如果用se…

LeetCode—289. 生命游戏

289. 生命游戏 题目描述&#xff1a; 根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初…

Java注解的基本概念和原理及其简单实用

一、注解的基本概念和原理及其简单实用 注解&#xff08;Annotation&#xff09;提供了一种安全的类似注释的机制&#xff0c;为我们在代码中添加信息提供了一种形式化得方法&#xff0c;使我们可以在稍后某个时刻方便的使用这些数据&#xff08;通过解析注解来使用这些数据&am…

js事件传参

阻止事件发生之前就执行了函数 除了创建匿名函数 function foo(a){console.log(a); } document.οnclickfoo(1) //document.οnclickfunction(){foo(1)}// document.addEventListener(click,foo(1),false)另外有bind() function foo(a){console.log(a); } document.οnclickfoo…

cin、cin.get()、cin.getline()、getline()、gets()等函数的用法(转)

学C的时候&#xff0c;这几个输入函数弄的有点迷糊&#xff1b;这里做个小结&#xff0c;为了自己复习&#xff0c;也希望对后来者能有所帮助&#xff0c;如果有差错的地方还请各位多多指教&#xff08;本文所有程序均通过VC 6.0运行&#xff09;转载请保留作者信息&#xff1b…

LeetCode—295. 数据流的中位数(困难)

295. 数据流的中位数&#xff08;困难&#xff09; 题目描述&#xff1a; 中位数是有序列表中间的数。如果列表长度是偶数&#xff0c;中位数则是中间两个数的平均值。 例如&#xff0c; [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 3) / 2 2.5 设计一个支持以下两种操作的数…

Atlas Samples Suse Linux 10.1

http://asyncpostback.com/ 这是一个展示Altas的相关Features的例子网站,网站的所有例子都有代码,是学习Altas的绝好教程Novell 发布了 SUSE Linux 10.1. 这个版本包含完整的Mono 开发环境和许多基于Mono的桌面应用. 对于专注于.net开发的你非常有必要来了解Mono.因为Mono的支持…

sudo apt-get update 与 sudo apt-get upgrate 的区别

1.sudo gedit /etc/apt/sources.list 源列表里面放置的一行行网址&#xff0c;在这个文件里加入或者注释&#xff08;加#&#xff09;掉一些源后&#xff0c;保存。这时候&#xff0c;我们的源列表里指向的软件就会增加或减少一部分 2. sudo apt-get update 这个命令&#xff…

oracle索引建立

1、明确地创建索引create index index_name on table_name(field_name)tablespace tablespace_namepctfree 5initrans 2maxtrans 255storage(minextents 1maxextents 16382pctincrease 0);2、创建基于函数的索引常用与UPPER、LOWER、TO_CHAR(date)等函数分类上&#xff0c;例&a…

android 中使用AsyncTask实现简单的异步编程

在开发移动客户端的时候往往要使用多线程来进行操作&#xff0c;我们通常会将耗时的操作放在单独的线程执行&#xff0c;避免其占用主线程而给用户带来不好的用户体验。但是在子线程中无法去操作主线程&#xff08;UI 线程&#xff09;&#xff0c;在子线程中操作UI线程会出现错…

网页制作秘招

第一招&#xff1a;有些主页&#xff0c;若把鼠标指向某个链接&#xff0c;在状态栏会出现该链接的说明&#xff0c;是不是会感觉很方便&#xff1f;其实这不难做到&#xff0c;只要在链接语句中加入以下的内容&#xff0c;就可以实现了&#xff01;试试看&#xff01;〈HTML〉…

LeetCode—52. N皇后 II(困难)

52. N皇后 II&#xff08;困难&#xff09; 题目描述&#xff1a; n 皇后问题研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。即令其中任意两个皇后都不同列、同行和在一条斜线上。 给你一个整数 n &#xff0c;返回 n 皇后问题不…

win10 子系统 ubuntu 16.04 安装 docker

2&#xff0c;更新系统软件 $ sudo apt-get update 3&#xff0c;安装依赖包 $ sudo apt-get install \apt-transport-https \ca-certificates \curl \software-properties-common 4&#xff0c;添加官方密钥 执行该命令时&#xff0c;如遇到长时间没有响应说明网络连接不到doc…

解析 Page.MaintainScrollPositionOnPostBack 属性

ASP.NET 的页面执行 PostBack 动作时&#xff0c;页面由伺服端重新传给客户端&#xff0c;而页面的垂直滚动条会跳回最上方&#xff0c;水平滚动条会跳回最左方。为了解决此情形&#xff0c;只要将 Page 的MaintainScrollPositionOnPostBack 属性设为True 时&#xff0c;页面就…

创建WebPart时的数据库连接问题。

ASP.NET加入的WebPart功能确实令人眼前一亮&#xff0c;问题如下&#xff1a;当我拖动一个WebPartManager到页面后&#xff0c;编译运行&#xff0c;竟然出现如下错误&#xff1a; 引用 “/WebSite1”应用程序中的服务器错误。 ----------------------------------------------…

Java创建大小顶堆

——实现模拟的大小顶堆&#xff08;优先队列与TreeMap&#xff09; 以Java中可自排序的数据结构&#xff0c;实现加入元素后&#xff0c;堆顶保持最大/最小 优先队列 ​ PriorityQueue是优先队列&#xff0c;作用是保证每次取出的元素都是队列中权值最小的&#xff0c;这里…

strcpy函数的实现

大家一般觉得名不见经传strcpy函数实现不是非常难&#xff0c;流行的strcpy函数写法是&#xff1a; char *my_strcpy(char *dst,const char *src) {assert(dst ! NULL);assert(src ! NULL);char *ret dst;while((* dst * src) ! \0) ;return ret; }假设注意到&#xff1a; 1&…