n皇后问题是一个典型的回溯算法的题目,就是在n*n的面板上,放n个皇后,每个皇后会攻击同一列和同一行还有两个斜边上的元素,问你放的方法,返回形式是一个List嵌套List,每个List里都是一种解决方案,每一个解决方案都是画一个面板,解决方案里的每一个元素都是每一个横行,如果没有放皇后,则以.来形容,如果放了皇后,以Q填充,在思想上肯定还是有一定难度的,先贴上java代码的实现,这里已经优化了很多,因为我们是一行一行来放的,所以在放入一行之后,这一行(执行方法isVaild时还没有往该行放Q的操作,所以此行是不可能有Q的存在的)以及这一行下面的所有行都是.,不存在有没有Q的存在,所以只需要判断现在的棋盘面板上的上方、左上方、右上方是否有Q的存在(isVaild实现)即可,这样看起来通俗易懂,当然这个思想是用了回溯算法,在每一个循环里面,先实施放Q的操作,在递归进去之后的一行代码,再将其还原,这就是回溯,因为有可能我们放到某一行之后,全部continue掉了,也就是此时遍历完当前行的所有列都没有找到一个合适的位置放皇后,相当于此路不通,所以我们要还原之前的现场,换一列重新递归,甚至这一行的所有列遍历完后,他的下一列还是无解,此时还要返回到更上面一行,这样就更有回溯的感觉了:

class Solution {List<List<String>> res = new ArrayList<List<String>>();//创建一个List[List用来存放最终结果并返回public List<List<String>> solveNQueens(int n) {char[][] borad = new char[n][n];//设置一个n*n的正方形char型数组for(char[] rchar: borad){//遍历二维数组的每一行Arrays.fill(rchar,'.');//填充每一行,棋盘初始化,开始都没有放皇后Q,直接.初始化}sovleQuestion(borad,0);//真正执行解决方案
return res;}public void sovleQuestion(char[][] borad,int row){int n = borad.length;//判断一下这个是几个皇后的问题,也就是棋盘的宽度
if(row==n){//如果n-1也便利完了,那么此时就会row==n,说明找到了一组解,将这个解放到返回的集合中res.add(charToList(borad)); //进行了将每一行char变为String的操作,返回一个List<String>并添加到List<List<String>>中return;//返回
}
for(int col = 0; col < n; col++){//进行每一列试探
if(!isValid(borad,row,col)){//判断这个位置是否能放Qcontinue;//不能放就到当前行的下一列
}
borad[row][col] = 'Q';//说明可以放,填入(做选择)
sovleQuestion(borad,row+1);//进行下一行的递归
borad[row][col] = '.';//撤销选择
}}public boolean isValid(char[][] board,int row, int col){for(int i = 0;i<row;i++){//判断当前元素的所有前面行的同列元素是否存在Qif(board[i][col] == 'Q'){return false;}}for(int i=row-1,j=col-1;i>=0&&j>=0;i--,j--){//判断左上方,所以行和列都是先减一if(board[i][j] == 'Q'){return false;}}for(int i = row-1,j=col+1;i>=0&&j<board[row].length;i--,j++){if(board[i][j] == 'Q'){//判断右上方是否有Qreturn false;}}return true;}public List<String> charToList(char[][] board){//数组变为List操作List<String> list = new ArrayList<String>();for(char[] rchar: board){list.add(String.copyValueOf(rchar));}return list;}
}

n皇后问题java版相关推荐

  1. hmcl离线登陆_最好用的Java版启动器HMCL

    原标题:最好用的Java版启动器HMCL 推荐的启动器是什么了?就是 Hello Minecraft! Launcher 简称HMCL,这款启动器特色很多.一张图片简单说明!!! 支持离线登录代表了什 ...

  2. Twitter的分布式雪花算法 SnowFlake 每秒自增生成26个万个可排序的ID (Java版)

    分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...

  3. 分布式主键解决方案----Twitter 雪花算法的原理(Java 版)

    SnowFlake 雪花算法 对于分布式系统环境,主键ID的设计很关键,什么自增intID那些是绝对不用的,比较早的时候,大部分系统都用UUID/GUID来作为主键,优点是方便又能解决问题,缺点是插入 ...

  4. 我的世界java下载1.13_Minecraft Java版 1.13.1-pre2 发布

    Minecraft Java 版 1.13.1-pre2 发布 Back from vacation, we're now trying to finalize 1.13.1 and get it t ...

  5. 我的世界java版不会玩_我的世界:五张MC趣图,Java版玩家永远不懂基岩版玩家的痛...

    <我的世界>1.17版本目前已经更新了8个快照版本,在玩家的期望中,Mojang总算是加入了新的洞穴--噪声洞穴(Noise Caves).虽然这属于洞穴与山崖更新的一大步,Java版玩家 ...

  6. 我的世界1.7.2 java_我的世界Java版1.7版本种子分享

    我的世界Java版的1.7版本中有哪些好的种子呢?下面就给大家带来我的世界Java版1.7版本种子分享,以供玩家参考. 1.seed:-6281771182477298288 x:74 y:68 z: ...

  7. 我的世界 java开发者_我的世界Java版开发者们畅聊水域更新

    ▍水域更新展望 Minecraft Java版的玩家们!你知不知道,现在就有一份快照供你试玩,在里面满是即将到来的水域更新特性?是真的!记住,你在快照里发现的所有东西都不是最终版本--你们的反馈永远是 ...

  8. CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版

    CSP:CSP认证考试:202012-1(期末预测之安全指数)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.Scanner;public class Mai ...

  9. CSP:CSP认证考试:202104-1(灰度直方图)满分答案,Java版

    CSP:CSP认证考试:202104-1(灰度直方图)满分答案,Java版 一.题目: 二.Java满分答案 import java.util.ArrayList; import java.util. ...

最新文章

  1. Django 模板4.1
  2. mysql sql w3cschool_SQL复习(w3school)笔记
  3. 英文构词法 —— ant、ent 后缀
  4. 存储过程,触发器,事务和锁
  5. 18.IDA-创建自己的sig
  6. 【java】System.getProperty()参数大全
  7. lambda的用法与实例(转载)
  8. Google Colab 免费GPU 教程
  9. c语言程序优化设计,C程序设计语言的教学策略优化设计
  10. NGUI学习笔记汇总
  11. newifi3 高恪魔改_原地升值?newifi 3 路由器刷入高恪固件教程
  12. 《Java并发编程实践》笔记1——并发编程基础
  13. oracle怎么查询关键字,Oracle 搜索关键字
  14. 微信公众平台开发[6] —— 微信开发集成类的使用
  15. 啊哈算法, 水管工游戏
  16. tzset函数与locatime时间函数的关系
  17. 风潮唱片-远方的寂静;专辑
  18. java小折叠车测评_java的折叠车怎么样?
  19. linux-ubuntu常用命令(深圳文鹏)
  20. 简练软考知识点整理-规划成本管理过程

热门文章

  1. Java黑皮书课后题第5章:**5.33(完全数)如果一个正整数等于除它它本身外其他所有除数之和。就称之为完全数。如6是第一个完全数,因为6=1+2+3。10000以下的完全数有4个,编写程序找出
  2. Java黑皮书课后题第3章:3.26(使用操作符 ||和^)编写一个程序,提示用户输入一个整数值,然后判断它能否被5和6整除、能否被5或6整除、以及能否被5或6整除但不能被同时整除
  3. 返回的到的数据做整合_Excel玩转数据分析常用的43个函数!(建议收藏)
  4. Android Studio 加载网络图片
  5. Linux的vim编辑器中的翻页命令
  6. java虚拟机 第二章Java内存区域与内存溢出异常
  7. SQL Server学习之路(五):“增删改查”之“改”
  8. 关于Java的“找不到或无法加载主类”
  9. 如何测得存储空间大小
  10. Android获取状态栏、标题栏、屏幕高度