LeetCode-51.N皇后
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例:
输入: 4
输出: [
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."], ["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
] 该题与LeetCode37题解数独类似:LeetCode-37.解数独
注释见代码
import java.util.ArrayList;
class Solution {
private List<List<String>> result;
public List<List<String>> solveNQueens(int n) {
char [][]array=new char [n][n];
result=new ArrayList<>();
//初始化数组
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
array[i][j]='.';
//先横再竖,全部规则符合时,切换到下一行
solveNQueens(array,0);
return result;
}
//参数n为数组行
public void solveNQueens(char [][]array,int n) {
int num=array.length;
//当n==num时,即为所有行数都已填入,此时处理array
if(n==num){
Deal(array);
return ;
}
for(int i=0;i<num;i++){
//每一位插入Q
array[n][i]='Q';
//因为从第一行开始填入,所以只需要进行从第一行到n行的检查
//分别为竖列的检查和斜的检查
if(checkj(array,n,i)&&checkij(array,n,i)){
//如果都符合规则的话就进入下一行
solveNQueens(array,n+1);
}
//当递归完成后或者不符合规则的时候更改回'.'
array[n][i]='.';
}
}
//处理array
private void Deal(char[][] array){
int num=array.length;
List<String> list=new ArrayList<>();
for(int i=0;i<num;i++){
String str="";
for(int j=0;j<num;j++){
str+=array[i][j];
}
list.add(str);
}
result.add(list);
}
//检查竖的
private boolean checkj(char [][]array,int i,int j){
for(int m=0;m<i;m++){
if(array[m][j]=='Q')
return false;
}
return true;
}
//检查斜的
private boolean checkij(char [][]array,int i,int j){
int num=array.length;
int tmpi=i,tmpj=j;
//从左上到该坐标
while(tmpi>0&&tmpj>0){
tmpi--;
tmpj--;
}
//寻找临界点
while(tmpi<i&&tmpj<j){
if(array[tmpi][tmpj]=='Q')
return false;
tmpi++;
tmpj++;
}
//从右上到该坐标
tmpi=i;
tmpj=j;
//寻找临界点
while(tmpi>0&&tmpj<num-1){
tmpi--;
tmpj++;
}
while(tmpi<i&&tmpj>j){
if(array[tmpi][tmpj]=='Q')
return false;
tmpi++;
tmpj--;
}
return true;
}
}
LeetCode-51.N皇后的更多相关文章
- Java实现 LeetCode 51 N皇后
51. N皇后 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决 ...
- leetcode 51. N皇后 及 52.N皇后 II
51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...
- [leetcode]51. N-QueensN皇后
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- LeetCode 51. N-QueensN皇后 (C++)(八皇后问题)
题目: The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two que ...
- leetcode 51 N皇后问题
代码,由全排列转化而来,加上剪枝,整洁的代码: 共有4个变量,res(最终的结果),level,当前合理的解,n皇后的个数,visit,当前列是否放过皇后,由于本来就是在新的行方皇后,又通过visit ...
- Leetcode之回溯法专题-51. N皇后(N-Queens)
Leetcode之回溯法专题-51. N皇后(N-Queens) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给 ...
- [LeetCode] 51. N-Queens N皇后问题
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- [LeetCode] N-Queens N皇后问题
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- LeetCode: 51. N-Queens(Medium)
1. 原题链接 https://leetcode.com/problems/n-queens/description/ 2. 题目要求 游戏规则:当两个皇后位于同一条线上时(同一列.同一行.同一45度 ...
- Java实现 LeetCode 52 N皇后 II
52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案 ...
随机推荐
- 【待补充】[Python_1] Python 安装
0. 说明 安装教程网上有很多,等下次安装再补充笔记 Python 下载地址
- 【转】Java学习---Java的锁和Mysql的锁机制
[原文]https://www.toutiao.com/i6593861446428262916/ Java和数据库的锁机制 https://www.toutiao.com/i659386144642 ...
- Azure IoT 预配置解决方案
Azure IoT 预配置解决方案 Sangyu Li © 2018 一.什么是Azure IoT 预配置解决方案? 如图,这就是Azure IoT Suite中 Provision solutio ...
- js节流
function _throttling(fn,wait,mustRun){ var time=null; var startTime= new Date() return function(){ c ...
- 怎样自适应ios设备大小
在编写移动端GIS程序的时候.常常要依据ios设备的大小来设置UI.曾经我在ios程序中,须要定义设备的值(如:宽度和高度),如: 可是假设是不同的设备.如iphone4.iphone5,甚至是 ...
- 虚拟主机ip配置,nginx.conf文件配置及日志文件切割
今天粗略整理了一下虚拟主机配置,nginx.conf文件的配置,及日志文件的切割,记录如下: nginx虚拟主机配置:1.IP地址配置,2.绑定ip地址和虚拟主机详情:1.ip地址的配置:ifconf ...
- php的匿名函数和闭包函数
php的匿名函数和闭包函数 tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use 引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因 ...
- [SQL123] Oracle SQL 统计一定时间间隔内的数据
--Group by State_ts "per X minutes"select to_char(state_ts, 'hh24')||':'||floor(to_char(st ...
- oracle中over函数
1.oracle中按一个字段分组排序后取第一条数据. SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字符 D ...
- 数据同步canal服务端配置mysql多主
canal服务端HA模式,本人并未使用过,为保证文章的完整性,从以下地址摘抄该部分内容,待以后验证及使用 https://github.com/alibaba/canal/wiki/AdminGuid ...