Java求解N皇后问题
设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。
示例:
输入:4
输出:[[“.Q…”,“…Q”,“Q…”,“…Q.”],[“…Q.”,“Q…”,“…Q”,“.Q…”]]
解释: 4 皇后问题存在如下两个不同的解法。
[
[“.Q…”, // 解法 1
“…Q”,
“Q…”,
“…Q.”],
[“…Q.”, // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
class Solution {List<List<String>> res = new ArrayList<>(); // 存放最终结果// 检查在棋盘的第x行第y列能否放皇后public boolean place(int x, int y, int n, char[][] ch){// 查看水平方向有没有皇后需要吗?不需要的!因为我们的每一行只会选择一个皇后。// 查看竖直方向有没有皇后(检查第x行之前的即可)for(int i=0;i<x;i++){if(ch[i][y]=='Q'){return false;}}// 查看45度方向能不能放皇后for(int i=x-1,j=y+1;i>=0&&j<n;i--,j++){if(ch[i][j]=='Q'){return false;}}// 查看135度方向能不能放皇后for(int i=x-1,j=y-1;i>=0&&j>=0;i--,j--){if(ch[i][j]=='Q'){return false;}}return true;}public List<String> ArrayToList(int n, char[][] ch){List<String> list = new ArrayList<>();for(int i=0;i<n;i++){list.add(String.valueOf(ch[i]));}return list;}public void backtrace(int x, int n, char[][] ch){// 回溯递归结束条件,x=n,即递归到第n+1行时,说明已经结束递归了if(x==n){// 将字符数组char[][]转换成List<String>List<String> list = ArrayToList(n, ch);// 放到结果集res.add(list);}// 水平上遍历,选择第x行第j列,并尝试这个位置是否能放皇后for(int j=0;j<n;j++){// 如果这个位置可以放皇后,则放置,并继续回溯下一行if(place(x,j,n,ch)){// 放置皇后ch[x][j] = 'Q';// 回溯比较下一行(深度遍历)backtrace(x+1, n, ch);// 回溯!ch[x][j] = '.';}}}public List<List<String>> solveNQueens(int n) {// 构造大小为n×n的棋盘char[][] ch = new char[n][n];// 给棋盘初始化for(int i=0;i<n;i++){Arrays.fill(ch[i],'.');}// 开始回溯backtrace(0, n, ch);return res;}
}
Java求解N皇后问题相关推荐
- 回溯法求解N皇后问题(Java实现)
回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解.这种迭代类似于穷举并且是试探性的,因为当目前的可 ...
- C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题
C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...
- 数据结构学习之栈求解n皇后问题
数据结构学习之栈求解n皇后问题 0x1 目的 深入掌握栈应用的算法和设计 0x2 内容 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...
- 非递归求解N皇后问题(回溯法)
一般而言,回溯法可以说是一种穷举法,适合于求解各种深度优先搜索的问题. 回溯法是一种应用广泛的算法.其关键点是解空间树和n元组可行解的定义. 非递归回溯法程序的结构基本上是相同的,该程序的结构可以用求 ...
- Java——求解一元n次方程(V1.0)
Java--求解一元n次方程(V1.0) 主要思路 通过 接口(interface) 进行求解方法声明,通过 implements 声明自己使用的接口 通过字符串 equals() 方法以及 whil ...
- 爬山法求解八皇后问题的全部解法
爬山法求解八皇后问题的全部解法 程序的概要设计思想 初始状态 冲突函数 寻找邻居状态 寻找全部解集 程序主要函数的作用 运行结果截图 Python源代码 程序的概要设计思想 爬山算法是一种局部贪婪算法 ...
- 回溯法求解N皇后问题及其时间复杂度分析
回溯法求解N皇后问题及其时间复杂度分析 一.回溯法简介 1. 什么是回溯法? 2. 回溯法的时间复杂度分析 蒙特卡罗方法 蒙特卡罗方法在回溯法求解时间复杂度中的应用 二.回溯法求解N皇后问题 1. 回 ...
- 利用Java求解“鸡兔同笼问题”:鸡和兔在一个笼子里,共有腿100条,头40个,问鸡兔各有几只?
Java求解"鸡兔同笼问题" public class Jttl {public static void main(String[] args) {int jt = 0 ;whil ...
- 链表之反转链表,万金油的解题方法(java求解)
链表之反转链表,一招鲜吃遍天(java求解) 内容目录 链表之反转链表,一招鲜吃遍天(java求解) 解题万金油 栗子1:反转整个链表 栗子2:反转某个区间内的链表 栗子3:按照k为一组,反转某个区间 ...
- Java求解一元二次方程+单元测试(IDEA+Junit)
介绍 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 1.安装JUnit插件步骤 File–>settings–>Plguins–>Browse rep ...
最新文章
- Resharper 5.0 注册码
- 前端学习(2803):点击商品列表导航到商品详情页
- 敏捷20周年:一场失败的起义
- 架构篇:大型网站技术架构
- graphql java中文文档_GraphQL学习指南 PDF 下载
- pycharm导入依赖包
- 数组存储地址的计算 --数据结构
- easyexcel 第一次导入导出会报错com.alibaba.excel.exception.ExcelAnalysisException,所以自定义excel导入导出表格
- echarts常见图形-不同种类不同颜色柱状图(二)
- java sapi.spvoice_SAPI使用总结——SpVoice的使用方法
- killall为什么有时候会找不到进程?
- Twitter的网页代码
- 名编辑电子杂志大师教程 | 打开文件
- php打印10以内减法表,幼儿10以内减法教案
- 编译tensorflow1.15.4,使其支持AVX2 和 FMA
- 一项新的前瞻性研究发现,Masimo SpHb®无创连续血红蛋白监测有助于为接受大手术的患者提供有效血液管理
- Golang语言快速上手到综合实战(Go语言、Beego框架、高并发聊天室、豆瓣电影爬虫) 下载
- TensorFlow 1.13.0-rc最新版本说明
- 计算机原理最大系统框图,计算机控制系统原理框图.docx
- 什么是Web?及web服务器原理
热门文章
- 云栖社区Markdown指南【2018版】
- Geometric Transformation(几何变换)
- 漫画:什么是架构师?
- VNC 锁屏之后无法输入密码解锁
- java中未处理的异常_Java中未处理的异常
- STM32串口通信发送Hello Windows!
- JS中使用java方法与数据库交互
- javascript 图(Graphs)算法与说明
- win2008服务器系统玩红警,Win10系统不能玩红警2的解决方法
- z5s+android+4.4,中兴NX403a(Nubia Z5S Mini Android 4.4)刷Recovery教程