皇后问题研究的是如何将 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. 解决Maven下载慢的问题

    直接在pom.xml中添加阿里的镜像 <repositories> <repository> <id>aliyun</id> <name>a ...

  2. 题解 P1312 【Mayan游戏】

    题面 过长已遮挡 题意 体面已经陈述题意(这题没有考语文阅读理解) 题解 ** 我还记得我曾经给自己找的锅,给某些人讲课的时候说过一句话:体面越长的题,越简单.** 这句话没有错,我会用接下来解决这道 ...

  3. 【Android自动化】测试系统的应用程序安装与卸载性能,判断长时间反复安装对系统的整体性能影响

    # -*- coding:utf-8 -*- import sys import os import time import subprocess from uiautomator import de ...

  4. redis三种启动方式

    Part I. 直接启动下载 官网下载:http://redis.io/download安装 tar zxvf redis-2.8.9.tar.gzcd redis-2.8.9#直接make 编译ma ...

  5. js之上传文件多图片预览

    多图片上传预览功能也是现在非常常用的 下面是html代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...

  6. 理解传说中的roll、yaw、pitch

    三维中 Yaw, pitch and roll 的区分(图片)                    yaw 航偏                                         pi ...

  7. Node基础知识点--学习笔记(一)

    一:建立http服务器: 在D盘建立一个文件夹node,放入app.js,代码如下: var http = require('http'); http.createServer(function(re ...

  8. PAT B1035 插入与归并 (25 分)

    根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...

  9. Java中的单利模式介绍

    单利模式:本来是不准备写的,但是最近发现好多公司面试时都会或多或少的提到单利模式,因此今天把单利模式拉出来说说. 定义:只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且 ...

  10. openstack vm ping 114.114.114.114

    route add -net 0.0.0.0 netmask 0.0.0.0 gateway 192.168.0.131 route del -net 0.0.0.0 netmask 0.0.0.0 ...