皇后问题研究的是如何将 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. 乘风破浪:LeetCode真题_026_Remove Duplicates from Sorted Array

    乘风破浪:LeetCode真题_026_Remove Duplicates from Sorted Array 一.前言     我们这次的实验是去除重复的有序数组元素,有大体两种算法. 二.Remo ...

  2. centos httpd开启https服务并申请免费https

    安装httpd yum -y install httpd httpd配置文件路径  /etc/httpd/conf/httpd.conf 安装OpenSSL yum install mod_ssl o ...

  3. beta冲刺————第三天(3/5)

    完善的具体内容: 前端: (1)可以进行修改文字大小背景 其中,金色的文字个人觉得很好看,点赞.(我很满意啊) (2)可以改变成夜间模式(也很不错啊) 后端: 尝试将本地的后端war文件,以及数据库传 ...

  4. 团队作业——Alpha冲刺 12/12

    团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:自定义保存界面布局以及交互接口函数的实现 明日任务:总结项目中的问题,为什么没能按照预期推进项目 郭剑南 今日任务:继续解决Python编 ...

  5. Lombok快速上手(安装、使用与注解参数)

    目录 Lombok插件安装与使用说明 常见参数 lombok的依赖于安装 依赖管理 IDEA插件的安装 @Data小例子 扩展@ToString 构造器注解扩展 @Log及其他日志注解 资料链接 Lo ...

  6. Scala学习之路 (三)Scala的基本使用

    一.Scala概述 scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性.scala运行在虚拟机上,并兼容现有的Java程序.Scala源代码被编译成java字节码,所以运行在JV ...

  7. Android安全测试

  8. js中获取url后面的参数值

    方法: //获取url路径?号后面的参数值.function GetRequest() { var url = location.search; //获取url中"?"符后的字串 ...

  9. docker镜像的创建方法docker file方式

    什么是docker file文件? 简单来说,docker file文件就是一个命令文本集合,容来记录创建docker镜像的步骤 快速入门: 1.新建一个docker file文件dockerfile ...

  10. (转)win7批量创建用户

    @echo off::zhangsan 改为你需要建立的用户名,123456改为你的密码,后面的两个参数的意思是“用户::不可以更改密码”和“密码永不过期”net user xiaowei 12345 ...