- 浏览: 185048 次
- 性别:
- 来自: 济南
文章分类
最新评论
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
N皇后的问题,典型的用回溯法解决的NP问题,用循环递归来处理。从第0行开始,我们创建一个长度为n的数组colInRow[],数组的下标代表行,数组中的元素代表对应行中皇后在列上的位置,例如colInRow[2] = 3, 代表第2行第三列的位置有皇后。每一次递归我们都将一个皇后放在对应行中的某一列中,如果递归到了第n行,我们就将这个结果放入结果集中。在往前寻找的时候,我们要判断加入皇后的位置是否合法,也就是在同一行同一列还有斜对角线上只能有一个皇后,同一行上肯定有只有一个皇后,因为我们递归每一行时,只加一个皇后,如果合法就递归下一行,所以我们只需要检查同一列和同一斜对角线上是否合法。对于同一列上,我们只需要比较当前行之前的行中在这一列是否有皇后即可;对于斜对角线上,符合一个规律|colInRow[i] - colInRow[row] |== row - i , 其中i < row, 满足这个条件都在一个对角线上。代码如下:
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
N皇后的问题,典型的用回溯法解决的NP问题,用循环递归来处理。从第0行开始,我们创建一个长度为n的数组colInRow[],数组的下标代表行,数组中的元素代表对应行中皇后在列上的位置,例如colInRow[2] = 3, 代表第2行第三列的位置有皇后。每一次递归我们都将一个皇后放在对应行中的某一列中,如果递归到了第n行,我们就将这个结果放入结果集中。在往前寻找的时候,我们要判断加入皇后的位置是否合法,也就是在同一行同一列还有斜对角线上只能有一个皇后,同一行上肯定有只有一个皇后,因为我们递归每一行时,只加一个皇后,如果合法就递归下一行,所以我们只需要检查同一列和同一斜对角线上是否合法。对于同一列上,我们只需要比较当前行之前的行中在这一列是否有皇后即可;对于斜对角线上,符合一个规律|colInRow[i] - colInRow[row] |== row - i , 其中i < row, 满足这个条件都在一个对角线上。代码如下:
public class Solution { public List<List<String>> solveNQueens(int n) { List<List<String>> result = new ArrayList<List<String>>(); int[] colInRow = new int[n]; solveNQueens(0, n, colInRow, result); return result; } private void solveNQueens(int row, int n, int[] colInRow, List<List<String>> result) { if(row == n) { printBoard(n, colInRow, result); return; } else { for(int i = 0; i < n; i++) { colInRow[row] = i; if(isValid(row, colInRow)) { solveNQueens(row + 1, n, colInRow, result); } } } } private boolean isValid(int row, int[] colInRow) { for(int i = 0; i < row; i++) { if(colInRow[i] == colInRow[row] || Math.abs(colInRow[i] - colInRow[row]) == row - i) return false; } return true; } private void printBoard(int n, int[] colInRow, List<List<String>> result) { List<String> list = new ArrayList<String>(); for(int i = 0; i < n; i++) { StringBuilder sb = new StringBuilder(); for(int j = 0; j < n; j++) { if(j == colInRow[i]) sb.append("Q"); else sb.append("."); } list.add(sb.toString()); } result.add(list); } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 270Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 271You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 390Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 379Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 504Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 568Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 483Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 671Follow up for N-Queens problem. ... -
First Missing Positive
2016-03-05 03:09 435Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 584Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 592Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 429All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 906Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 935Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 607Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 694Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 860Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 791You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 725For a undirected graph with tre ... -
Bulb Switcher
2016-02-28 12:12 447There are n bulbs that are init ...
相关推荐
在"N-Queens-with-Simulated-Annealing-master"压缩包中,可能包含以下文件和目录: - `src`:源代码目录,可能有`Main.java`作为主程序入口,以及其他类如`Board.java`(棋盘类)、`QueenSolver.java`(模拟退火...
N-Queens AI 实现 问题:将 N 个国际象棋皇后放在 N*N 棋盘上,这样任何皇后都不能互相攻击 蛮力 - 完成 爬山 - 完成 随机波束搜索 - 完成 模拟退火 - 完成 遗传算法 - 完成
js js_leetcode题解之52-n-queens-II.js
MAX_LENGTH/N: 4 STARTING_POPULATION:40 MAX_EPOCHS:1000 最大速度:4.0 MINIMUM_SHUFFLES:8 MAXIMUM_SHUFFLES:20 运行:1 运行时间(以纳秒为单位):38167312 发现时间:1 人口规模:40 更多详情、使用方法...
js js_leetcode题解之51-n-queens.js
在本资源包中,我们关注的是使用Python编程语言实现遗传算法来解决经典的“n-queens问题”。这个问题要求在n×n的棋盘上放置n个皇后,使得每个皇后都不能攻击到其他任何一个皇后(即不能处于同一行、同一列或同一对...
n-queens-visualizer, 在反应&通量中,对N 皇后问题可视化的解决 n局部搜索算法的可视化探索queens皇后问题的解。 反应岩石的特征。查看实况:https://haseeb-qureshi.github.io/n-queens-visualizer 用不同的局部...
In this project, you are going to construct a CSP for N-Queens problem. You will be given several python files. Files to Edit and Submit: You will fill in portions of submission.py during the ...
Tabu Search(禁忌搜索)是一种全局优化算法,由 Fred Glover 在1989年提出,用于解决复杂的组合优化问题,如旅行商问题(TSP)和n-Queens问题。它通过在搜索过程中避免近期已探索过的解决方案,以跳出局部最优解,...
在"n-queens-master"压缩包中,可能包含了上述几种实现的源代码,供学习者参考和研究。通过分析和理解这些代码,可以深入理解N-Queens问题的解决策略,提升JavaScript编程和算法设计能力。同时,也可以根据实际需求...
Rust 中的 N-Queens 在 Rust 中实现的 n-queens... 请参阅 nqueens.rs 以获得对该算法的更详细的解释,包括对所有位魔法的彻底解释。 对于在 js 中实现的相同算法(大约慢 200 倍),请参阅我的 n-queens.js 存储库。
2. **JavaScript文件**:实现N-Queens问题的逻辑,可能有`nqueens.js`或类似的文件,用于生成和检查皇后的位置,以及更新棋盘的视觉表示。 3. **CSS文件**:样式表,如`styles.css`,用于定义棋盘、皇后和其他元素...
NQueens N-Queens 问题是更流行的 Queens 问题的扩展 ##基准 尺寸 是时候找到第一个解决方案了 8-皇后 0.19s 用户 0.09s 系统 127% cpu 总计 0.222 12-皇后 0.21s 用户 0.11s 系统 129% cpu 总计 0.244 16-皇后...
Javascript N-Queens 一个使用非常简单的遗传算法解决 N-Queens 问题的 Javascript 程序。 演示 在线
#n-queens 这是我在学生完成的一个项目。 我的这个项目的合作伙伴是 Benjamin Zarzycki。 任务是创建一个程序,该程序可以解决用户输入的任何给定n的。 为了改变任务,我们还添加了使用多个 HTML5 Web Worker 同时...
NQueens nQueens = new NQueens(8); List<List<Integer>> solutions = nQueens.solveNQueens(); for (List<Integer> solution : solutions) { System.out.println(solution); } } } ``` 在这个代码中,我们...
生成阴影N-Queens板的简单mathematica代码,您可以使用它来编写通用解决方案,并且提供了一个。 要查看棋盘,请在棋盘上简单地使用 arrayplot。 这是为布朗博士写的,作为 STEP 的一部分。 这里有一些例子。 n = 6...
在“n-queens-master”这个项目中,除了算法实现,还可能包含了测试用例、日志记录和性能优化等方面的内容。测试用例用于验证算法的正确性,确保在不同规模的棋盘上都能得到正确的结果。日志记录则帮助我们跟踪算法...
#n-queens 这是我在学生时代完成的一个项目。 这个项目是与一对合作的。
N-Queens N-Queens problem of multi-machine parallel solver. 8 皇后问题在单机上的运算时间是毫秒级,有 92 个解,编程实现之(**注意:目前世界纪录是 N = 26, 研究 N-皇后问题的并行算法,写一个单机多线程...