博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LintCode 33. N皇后问题
阅读量:5303 次
发布时间:2019-06-14

本文共 2355 字,大约阅读时间需要 7 分钟。

DFS题,这个代码几乎是看的九章的答案,写的是真的好,个个变量函数的命名确实有感觉,用一个List同时表示行和列非常巧妙

import org.junit.Test;import java.util.ArrayList;import java.util.List;public class SolveNQueens {
/** * @param n: The number of queens * @return: All distinct solutions *

* 33. N皇后问题 * n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。 *

* 给定一个整数n,返回所有不同的n皇后问题的解决方案。 *

* 每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。 *

* 样例 * 对于4皇后问题存在两种解决的方案: *

* [ *

* [".Q..", // Solution 1 *

* "...Q", *

* "Q...", *

* "..Q."], *

* ["..Q.", // Solution 2 *

* "Q...", *

* "...Q", *

* ".Q.."] *

* ] *

* 挑战 * 你能否不使用递归完成? */ public List

> solveNQueens(int n) { // write your code here List
> result = new ArrayList<>(); if (n <= 0) { return result; } List
cols = new ArrayList<>(); dfsSearch(result, cols, n); return result; } public void dfsSearch(List
> result, List
cols, int n) { if (cols.size() == n) { result.add(drawChessboard(cols)); return; } for (int colIndex = 0; colIndex < n; colIndex++) { //如果不可放置就跳过 if (!isValid(cols, colIndex)) { continue; } cols.add(colIndex); dfsSearch(result, cols, n); cols.remove(cols.size() - 1); } } private List
drawChessboard(List
cols) { List
chessboard = new ArrayList<>(); for (int row = 0; row < cols.size(); row++) { StringBuilder stringBuilder = new StringBuilder(); for (int col = 0; col < cols.size(); col++) { stringBuilder.append(cols.get(row) == col ? 'Q' : '.'); } chessboard.add(stringBuilder.toString()); } return chessboard; } private boolean isValid(List
cols, int column) { //这里把cols的坐标作为rowIndex,其中储存的值维colIndex //因为下一个存储在cols int row = cols.size(); for (int rowIndex = 0; rowIndex < cols.size(); rowIndex++) { if (cols.get(rowIndex) == column) { return false; } if (cols.get(rowIndex) - column == rowIndex - row) { return false; } if (cols.get(rowIndex) - column == row - rowIndex) { return false; } } return true; } @Test public void testSolveNQueens() { List
> chessboard = solveNQueens(4); for (int i = 0; i < chessboard.size(); i++) { System.out.println(chessboard.get(i).toString()); } }}

转载于:https://www.cnblogs.com/wei1/p/9582054.html

你可能感兴趣的文章
[CMD]重启电脑
查看>>
Android实例-设置消息提醒(XE8+小米2)
查看>>
vs安装失败,发生严重错误,错误号:Error 0x80070643
查看>>
Oracle队列锁enq:US,Undo Segment
查看>>
python实现简单爬虫功能
查看>>
Keras 使用过程问题汇总
查看>>
开源词袋模型DBow3原理&源码(二)ORB特征的保存和读取
查看>>
php服务器端与android客户端通信问题
查看>>
AAAI2019 | 基于区域分解集成的目标检测 论文解读
查看>>
数字澳洋背后的用友云混合云架构支撑
查看>>
8.14-rqt_common_pluggins 详解
查看>>
神奇的magento!
查看>>
帝国cms调用栏目自定义字段(栏目简介)如何操作
查看>>
UVA 10763 Foreign Exchange
查看>>
红黑树的实现
查看>>
最小生成树Prim算法(邻接矩阵和邻接表)
查看>>
HDU 1575 EASY
查看>>
[转]各种有用的PHP开源库精心收集
查看>>
WTL--SDI框架分析
查看>>
打坐是开发潜能的快速方法
查看>>