皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

  上图为 8 皇后问题的一种解法。

  给定一个整数 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皇后的更多相关文章

  1. Java实现 LeetCode 51 N皇后

    51. N皇后 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决 ...

  2. leetcode 51. N皇后 及 52.N皇后 II

    51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...

  3. [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 ...

  4. 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 ...

  5. leetcode 51 N皇后问题

    代码,由全排列转化而来,加上剪枝,整洁的代码: 共有4个变量,res(最终的结果),level,当前合理的解,n皇后的个数,visit,当前列是否放过皇后,由于本来就是在新的行方皇后,又通过visit ...

  6. Leetcode之回溯法专题-51. N皇后(N-Queens)

    Leetcode之回溯法专题-51. N皇后(N-Queens) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给 ...

  7. [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 ...

  8. [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 ...

  9. LeetCode: 51. N-Queens(Medium)

    1. 原题链接 https://leetcode.com/problems/n-queens/description/ 2. 题目要求 游戏规则:当两个皇后位于同一条线上时(同一列.同一行.同一45度 ...

  10. Java实现 LeetCode 52 N皇后 II

    52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案 ...

随机推荐

  1. oracle数据库中如何去除空格

    目前,我所知道的就有两种方法: 一.trim(a)--只能去除字符串左右的空格 select trim(leading from ' ——11—— ') aa from dual; select tr ...

  2. sql点滴44—mysql忘记root密码

    1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令: net stop mysql 打开第一个cmd1窗口,切换到mysql的bin目录,运行命令: mysq ...

  3. sphinx编译安装

    install sphinx wget http://sphinxsearch.com/files/sphinx-2.0.8-release.tar.gz tar zxvf sphinx--relea ...

  4. 开发jQuery插件的基本步骤

    在进行开发jQuery插件前,首先要了解一些知识: 1.闭包 1.1.闭包的作用: · 避免全局依赖 · 避免第三方破坏 · 兼容jQuery操作符'$'和jQuery 1.2.闭包的形式 (func ...

  5. 使用 rem 作为单位使页面自适应设备宽度

    一.新建 rem.js 文件,代码如下: export default function () { document.documentElement.style.fontSize = document ...

  6. Locust环境搭建及应用-hc课堂笔记

    Locust环境搭建: 1,在命令窗口中,进入到python项目路径,如:d:\Pycharmproject\venv\Scripts 2,执行Scripts下的active.bat,进入到虚拟环境 ...

  7. Beautiful Soup (一)

    一.Beautiful Soup库的理解 1.Beautiful Soup库可以说是对HTML进行解析.遍历.维护“标签树”的功能库 2.pip install bs4 3.from bs4 impo ...

  8. HDU 2159 FATE(有选择物品总个数限制的完全背包,经典!!)

    FATE Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  9. PRML1-引言

    本系列是根据<pattern recognition and machine learning>一书写的,算是读书笔记?算是吧.因为是从自己角度出发,所以其实很大程度上自己看得懂,估计别人 ...

  10. MView的DDL查找:

    Select dbms_metadata.get_ddl('MATERIALIZED_VIEW','MVIEW_NAME') from dual: