51.N皇后(N-Queens)
题目描述
N皇后问题研究的是,如何将 n 个皇后放置在 n×n 的棋盘上,使得两两皇后之间不能相互攻击。
即任意两个皇后都不能处于同一行、同一列或同一斜线上
给定一个整数 n,返回 n 皇后问题的所有解法。
每一种解法包含了一个 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
例如,4皇后问题有两种解法:
[[".Q..", // 解法 1"...Q","Q...","..Q."],["..Q.", // 解法 2"Q...","...Q",".Q.."]
]
解题方法
public class Solution {public List<List<String>> solveNQueens(int n) {char[][] board = new char[n][n];for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)board[i][j] = '.';List<List<String>> res = new ArrayList<List<String>>();dfs(board, 0, res);return res;}private void dfs(char[][] board, int colIndex, List<List<String>> res) {if(colIndex == board.length) {res.add(construct(board));return;}for(int i = 0; i < board.length; i++) {if(validate(board, i, colIndex)) {board[i][colIndex] = 'Q';dfs(board, colIndex + 1, res);board[i][colIndex] = '.';}}}private boolean validate(char[][] board, int x, int y) {for(int i = 0; i < board.length; i++) {for(int j = 0; j < y; j++) {if(board[i][j] == 'Q' && (x + j == y + i || x + y == i + j || x == i))return false;}}return true;}private List<String> construct(char[][] board) {List<String> res = new LinkedList<String>();for(int i = 0; i < board.length; i++) {String s = new String(board[i]);res.add(s);}return res;}
}
51.N皇后(N-Queens)相关推荐
- 日拱一卒——LeetCode 51.N皇后
大家好呀,今天是今天为大家带来的LeetCode的题目是LeetCode 51.N皇后问题,算是一道很经典的题目,也是一道难度不低的题目,但是只要我们掌握并理解了判断的逻辑,并且在代码编写上进行注 ...
- LeetCode回溯算法——51.N皇后问题详解
51.N皇后 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子. n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整 ...
- 代码随想录算法训练营第30天 | 51. N皇后 37.解数独 332.重新安排行程 回溯篇小结
代码随想录系列文章目录 回溯篇 - 棋盘问题 图的dfs 文章目录 代码随想录系列文章目录 51.N皇后 37.解数独 332.重新安排行程 回溯篇小结 51.N皇后 题目链接 这道题的思路是什么样的 ...
- 代码随想录算法训练营第30天| 332.重新安排行程 、51. N皇后 、 37. 解数独
代码随想录算法训练营第30天| 332.重新安排行程 .51. N皇后 . 37. 解数独 332.重新安排行程 开始想的是将行程进行全排列之后,然后选出一个字典排序最小的.就也是使用的回溯的思路. ...
- 代码随想录算法训练营第三十天| 第七章 回溯算法:332.重新安排行程,51.N皇后,37.解数独(python)
回溯算法总结 332.重新安排行程 讲解链接 class Solution:def __init__(self):self.res = []self.dict = defaultdict(list)d ...
- 代码随想录【Day 30】| 332.重新安排行程 、51. N皇后 、37. 解数独
代码随想录[Day 30] | 332.重新安排行程 .51. N皇后 .37. 解数独 332.重新安排行程 题目链接:332.重新安排行程 卡尔文解 解题思路及注意事项: 代码实现: 51. N皇 ...
- Leetcode.51. N 皇后
Leetcode.51. N 皇后 难度:hard 好久没有过hard题目了,还是很开心! 本题的难点在于如何对一个二维数组进行回溯,我们的思路是以chessBoard的行hang为树的每一层,每次递 ...
- LeetCode 51. N 皇后、52. N 皇后 II
51. N 皇后 n皇后问题要求皇后放置后,同一行,同一列,同一斜线上不存在其他的皇后即可 采用回溯法解决该问题 同时应该设置一个函数判断当该位置放置皇后后,是否合法 因为是采用回溯法放置皇后,每行只 ...
- 代码随想录刷题|LeetCode 332.重新安排行程 51. N皇后 37. 解数独
目录 332.重新安排行程 思路 重新安排行程 51. N皇后 思路 N皇后 37. 解数独 思路 解数独 这三道题目都是困难题目,都是根据代码随想录的思路总结书写,慢慢理解,慢慢熟练 ...
- 算法训练day24 | php | 332.重新安排行程 , 51. N皇后 , 37. 解数独 ,总结
一.力扣题332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点.请你对该行程进行重新规划排序. 所有这些机 ...
最新文章
- 国拨经费约31.48亿!科技部发布科技创新2030 —“脑科学与类脑研究”重大项目2021年度项目申报指南...
- PyTorch模型量化工具学习
- 广告贴——希望大家有空能够参加11月27日的《葵花宝典——WPF自学手册》签名售书活动...
- zsh 隐藏用户名和主机
- mysql写入监控_zabbix 自定义key 监控mysql增删查改
- 地图统计_庄园地图“出镜率”排名,500场数据统计,红教堂第一
- 用 .NET 3.5 创建 ToJSON() 扩展方法
- api商品分享源码_SSM框架高并发和商品秒杀项目高并发秒杀API源码免费分享
- JMeter如何和Charles进行接口测试
- oracle 删除用户和依赖,Oracle 12.2使用手动创建与注册依赖对象来执行联机重定义...
- 部署KMS激活后用户端一些情况的确认
- 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)
- 兔子会死怎么办? 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,假如兔子会死
- mysql 5.6 免安装版_mysql 5.6.15的免安装版 安装
- 惠普暗影精灵Plus 3代 (OMEN 17-an014TX)参数
- 通信工程师传输与接入ATM网络组成和接口
- 用数据说话,看中国49个地方(省、市、高新区)集成电路产业实力情况
- MySQL数据库查看时区
- 163邮箱怎么设置签名?商务邮箱哪些正规?163邮箱个人怎么用?
- 踏上自媒体之路,分享必备技能心得