Java 使用回溯递归的8皇后问题
我一直在研究8皇后的问题,但我被卡住了。我不要密码。为了理解如何使用回溯递归来解决这个问题,我会喜欢指导和指导 该程序应该像两个解决方案一样,通过在ASCII中绘制皇后的位置来枚举N皇后问题的所有解决方案 到目前为止,我的伪代码是:Java 使用回溯递归的8皇后问题,java,language-agnostic,recursion,n-queens,Java,Language Agnostic,Recursion,N Queens,我一直在研究8皇后的问题,但我被卡住了。我不要密码。为了理解如何使用回溯递归来解决这个问题,我会喜欢指导和指导 该程序应该像两个解决方案一样,通过在ASCII中绘制皇后的位置来枚举N皇后问题的所有解决方案 到目前为止,我的伪代码是: void queen(int n){ for( int i = 0; i < n; i++){ place queen[ i ] on row i; for(int j = 0 ; j < n ; j++){
void queen(int n){
for( int i = 0; i < n; i++){
place queen[ i ] on row i;
for(int j = 0 ; j < n ; j++){
if( queen[ i ] is not in the same column as queen[0] through queen[ i - 1 ] &&
queen[ i ] is not on the same major diagonal with queen[0] through queen[ i -1 ] &&
queen[ i ] is not on the same minor diagonal with queen[0] through queen[ i -1 ] ) {
print 'Q ';
}
else{
print '* ';
}
System.out.println();
}
System.out.println();
}
}
void queen(int n){
对于(int i=0;i
我的伪代码中没有任何回溯递归,因为我不知道怎么做
非常感谢您的帮助。请不要输入代码
(针对Nemo的更新):
解算器(int n,电路板b){
for(int i=0;i
对吗
(更新2):
solver8(董事会/*在前7列中显示皇后*/){
//在第8栏中放置一个女王;
对于(第8列中女王的每个可能位置)
或者换句话说,int i=0;i
等等,直到
solver1(1, empty board){
for(int i = 0; i < board.length; i++){
place queen in row[i] of column 1;
solver2(board with queen in row[i] of column 1);
}
}
solver1(1,空板){
对于(int i=0;i
更新3(已编辑):
private int numberOfQueens=8;
解算器(int n,电路板b){
for(int r=0;r
请在上一页的此处查看此精美动画
另外,请查看:
查看此处解释的。对此类问题使用递归的目的是让您可以按照“我现在放置了k个皇后;如果皇后总数为n,我如何放置其余的皇后?”的方式思考,因此递归函数应采用两个参数:皇后的目标数,以及到目前为止皇后的数量。在编写函数时,您的目标首先是尝试放置第k个皇后的不同方法。但是,当您选择了一个可能的位置并发现它是有效的,您需要放置剩余的n-k-1皇后。我们怎样才能做到这一点?答案是:递归!使用参数k-1调用函数(从函数内部),以指示要放置剩余的k-1皇后。当你用尽所有的可能性(或者发现没有一个是可能的)时,只需从函数返回-然后你将返回到上一个函数调用(例如,试图放置第k个皇后的函数调用) 编辑:您还需要创建一个二维数组来表示板的当前状态;该数组必须作为递归函数的附加参数发送,或者作为包含该方法的类的字段保存
至于回溯,只需确保使用k+1调用的函数在返回之前从板中移除k+1皇后即可完成回溯;这实质上是说“我们现在(未成功)尝试了所有放置剩余皇后的方法-基于已经放置的k皇后的位置。没有一个成功,因此请调整第一个k皇后的位置(这将由使用k调用的函数和调用该函数的函数完成,依此类推)然后重试。“将第一个皇后放在[0][0]中,然后为第二个皇后找到一个位置。假设您找到了一个,然后转到下一个,依此类推。假设您的第五个皇后不能放在第五列或第五行的任何位置(随你怎么说)回到第四个位置,再找一个位置。然后再到第五个位置。假设你在第八个位置,没有位置可用。到第七个位置,那里仍然没有任何位置。你将继续返回到第二个位置,再找到第二个位置,再到第三个位置。这有意义吗…一般来说,递归回溯搜索结果如下所示:
// On input, s represents a valid State up to depth d-1
sub do_it(int d, State s)
if (d == MAX_DEPTH+1)
// State s represents an answer! Print it and return.
else
(augment s to make it valid for depth d)
for each augmented_s
do_it(d+1, augmented_s)
end for
end if
end sub
// top level
do_it(0, empty_state)
请注意,对于给定的s
有效深度d-1
,可以有多种方法将其扩展到有效深度d
的状态。我们的想法是使用其中的每种方法来称呼自己
对于这个问题,“state”是board。深度“d-1”可能意味着第一个d-1列已填充。合法的扩展状态将是带有q的状态
solver1(1, empty board){
for(int i = 0; i < board.length; i++){
place queen in row[i] of column 1;
solver2(board with queen in row[i] of column 1);
}
}
private int numberOfQueens = 8;
solver(int n, Board b){
for(int r = 0; r < b.length; r++){
place queen in row[r] of column[n];
if(n == numberOfQueens){
print the board;
return;
}
else{
solver(n+1, board with queen in row[r] of column[n]);
}
}
}
}
// On input, s represents a valid State up to depth d-1
sub do_it(int d, State s)
if (d == MAX_DEPTH+1)
// State s represents an answer! Print it and return.
else
(augment s to make it valid for depth d)
for each augmented_s
do_it(d+1, augmented_s)
end for
end if
end sub
// top level
do_it(0, empty_state)
solver(int n, Board b)
*
*
*--
---
--*
--*
---
*--
package queenproblem;
public class QueenProblem
{
int numQueens[];// hold columns postion
int numQueen;
QueenProblem(int noOfQueens) {
this.numQueen = noOfQueens;
numQueens = new int[noOfQueens];
}
public static void main(String[] args) {
new QueenProblem(8).solveProblem();
}
public void solveProblem() {
arrange(0);
}
// recursive Function
void arrange(int rowIndex) {
// 1.to check valid Postion of not.
// 2. to check all Queens postion is found or not.
for (int i = 0; i < numQueen; i++)
{
if (isValid(rowIndex, i))
{
numQueens[rowIndex] = i;// save col index
if (rowIndex == numQueen - 1)
{
printsBoard();
} else
{
arrange(rowIndex + 1);
}
}
}
}
private void printsBoard() {
for (int i = 0; i < numQueen; i++)
{
for (int j = 0; j < numQueen; j++)
{
if (numQueens[i] == j)
{
System.out.print(" * ");
} else System.out.print(" - ");
}
System.out.println();
}
System.out.println();
}
boolean isValid(int rowIndex, int colIndex) {
for (int i = 0; i < rowIndex; i++)
{
// on the save columns
if (numQueens[i] == colIndex) return false;
if ((i - rowIndex) == (numQueens[i] - colIndex)) return false;
if ((i - rowIndex) == (colIndex - numQueens[i])) return false;
}
return true;
}
}
* - - - - - - -
- - - - * - - -
- - - - - - - *
- - - - - * - -
- - * - - - - -
- - - - - - * -
- * - - - - - -
- - - * - - - -
* - - - - - - -
- - - - - * - -
- - - - - - - *
- - * - - - - -
- - - - - - * -
- - - * - - - -
- * - - - - - -
- - - - * - - -
* - - - - - - -
- - - - - - * -
- - - * - - - -
- - - - - * - -
- - - - - - - *
- * - - - - - -
- - - - * - - -
- - * - - - - -
* - - - - - - -
- - - - - - * -
- - - - * - - -
- - - - - - - *
- * - - - - - -
- - - * - - - -
- - - - - * - -
- - * - - - - -
- * - - - - - -
- - - * - - - -
- - - - - * - -
- - - - - - - *
- - * - - - - -
* - - - - - - -
- - - - - - * -
- - - - * - - -
- * - - - - - -
- - - - * - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - - - - *
- - - - - * - -
- - - * - - - -
- * - - - - - -
- - - - * - - -
- - - - - - * -
- - - * - - - -
* - - - - - - -
- - - - - - - *
- - - - - * - -
- - * - - - - -
- * - - - - - -
- - - - - * - -
* - - - - - - -
- - - - - - * -
- - - * - - - -
- - - - - - - *
- - * - - - - -
- - - - * - - -
- * - - - - - -
- - - - - * - -
- - - - - - - *
- - * - - - - -
* - - - - - - -
- - - * - - - -
- - - - - - * -
- - - - * - - -
- * - - - - - -
- - - - - - * -
- - * - - - - -
- - - - - * - -
- - - - - - - *
- - - - * - - -
* - - - - - - -
- - - * - - - -
- * - - - - - -
- - - - - - * -
- - - - * - - -
- - - - - - - *
* - - - - - - -
- - - * - - - -
- - - - - * - -
- - * - - - - -
- * - - - - - -
- - - - - - - *
- - - - - * - -
* - - - - - - -
- - * - - - - -
- - - - * - - -
- - - - - - * -
- - - * - - - -
- - * - - - - -
* - - - - - - -
- - - - - - * -
- - - - * - - -
- - - - - - - *
- * - - - - - -
- - - * - - - -
- - - - - * - -
- - * - - - - -
- - - - * - - -
- * - - - - - -
- - - - - - - *
* - - - - - - -
- - - - - - * -
- - - * - - - -
- - - - - * - -
- - * - - - - -
- - - - * - - -
- * - - - - - -
- - - - - - - *
- - - - - * - -
- - - * - - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - * - - -
- - - - - - * -
* - - - - - - -
- - - * - - - -
- * - - - - - -
- - - - - - - *
- - - - - * - -
- - * - - - - -
- - - - * - - -
- - - - - - - *
- - - * - - - -
* - - - - - - -
- - - - - - * -
- * - - - - - -
- - - - - * - -
- - * - - - - -
- - - - - * - -
- * - - - - - -
- - - - * - - -
- - - - - - - *
* - - - - - - -
- - - - - - * -
- - - * - - - -
- - * - - - - -
- - - - - * - -
- * - - - - - -
- - - - - - * -
* - - - - - - -
- - - * - - - -
- - - - - - - *
- - - - * - - -
- - * - - - - -
- - - - - * - -
- * - - - - - -
- - - - - - * -
- - - - * - - -
* - - - - - - -
- - - - - - - *
- - - * - - - -
- - * - - - - -
- - - - - * - -
- - - * - - - -
* - - - - - - -
- - - - - - - *
- - - - * - - -
- - - - - - * -
- * - - - - - -
- - * - - - - -
- - - - - * - -
- - - * - - - -
- * - - - - - -
- - - - - - - *
- - - - * - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - - * - -
- - - - - - - *
* - - - - - - -
- - - * - - - -
- - - - - - * -
- - - - * - - -
- * - - - - - -
- - * - - - - -
- - - - - * - -
- - - - - - - *
* - - - - - - -
- - - - * - - -
- - - - - - * -
- * - - - - - -
- - - * - - - -
- - * - - - - -
- - - - - * - -
- - - - - - - *
- * - - - - - -
- - - * - - - -
* - - - - - - -
- - - - - - * -
- - - - * - - -
- - * - - - - -
- - - - - - * -
- * - - - - - -
- - - - - - - *
- - - - * - - -
* - - - - - - -
- - - * - - - -
- - - - - * - -
- - * - - - - -
- - - - - - * -
- * - - - - - -
- - - - - - - *
- - - - - * - -
- - - * - - - -
* - - - - - - -
- - - - * - - -
- - * - - - - -
- - - - - - - *
- - - * - - - -
- - - - - - * -
* - - - - - - -
- - - - - * - -
- * - - - - - -
- - - - * - - -
- - - * - - - -
* - - - - - - -
- - - - * - - -
- - - - - - - *
- * - - - - - -
- - - - - - * -
- - * - - - - -
- - - - - * - -
- - - * - - - -
* - - - - - - -
- - - - * - - -
- - - - - - - *
- - - - - * - -
- - * - - - - -
- - - - - - * -
- * - - - - - -
- - - * - - - -
- * - - - - - -
- - - - * - - -
- - - - - - - *
- - - - - * - -
* - - - - - - -
- - * - - - - -
- - - - - - * -
- - - * - - - -
- * - - - - - -
- - - - - - * -
- - * - - - - -
- - - - - * - -
- - - - - - - *
* - - - - - - -
- - - - * - - -
- - - * - - - -
- * - - - - - -
- - - - - - * -
- - * - - - - -
- - - - - * - -
- - - - - - - *
- - - - * - - -
* - - - - - - -
- - - * - - - -
- * - - - - - -
- - - - - - * -
- - - - * - - -
* - - - - - - -
- - - - - - - *
- - - - - * - -
- - * - - - - -
- - - * - - - -
- * - - - - - -
- - - - - - - *
- - - - * - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - - * - -
- - - * - - - -
- * - - - - - -
- - - - - - - *
- - - - - * - -
* - - - - - - -
- - * - - - - -
- - - - * - - -
- - - - - - * -
- - - * - - - -
- - - - - * - -
* - - - - - - -
- - - - * - - -
- * - - - - - -
- - - - - - - *
- - * - - - - -
- - - - - - * -
- - - * - - - -
- - - - - * - -
- - - - - - - *
- * - - - - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - * - - -
- - - * - - - -
- - - - - * - -
- - - - - - - *
- - * - - - - -
* - - - - - - -
- - - - - - * -
- - - - * - - -
- * - - - - - -
- - - * - - - -
- - - - - - * -
* - - - - - - -
- - - - - - - *
- - - - * - - -
- * - - - - - -
- - - - - * - -
- - * - - - - -
- - - * - - - -
- - - - - - * -
- - * - - - - -
- - - - - - - *
- * - - - - - -
- - - - * - - -
* - - - - - - -
- - - - - * - -
- - - * - - - -
- - - - - - * -
- - - - * - - -
- * - - - - - -
- - - - - * - -
* - - - - - - -
- - * - - - - -
- - - - - - - *
- - - * - - - -
- - - - - - * -
- - - - * - - -
- - * - - - - -
* - - - - - - -
- - - - - * - -
- - - - - - - *
- * - - - - - -
- - - * - - - -
- - - - - - - *
* - - - - - - -
- - * - - - - -
- - - - - * - -
- * - - - - - -
- - - - - - * -
- - - - * - - -
- - - * - - - -
- - - - - - - *
* - - - - - - -
- - - - * - - -
- - - - - - * -
- * - - - - - -
- - - - - * - -
- - * - - - - -
- - - * - - - -
- - - - - - - *
- - - - * - - -
- - * - - - - -
* - - - - - - -
- - - - - - * -
- * - - - - - -
- - - - - * - -
- - - - * - - -
* - - - - - - -
- - - * - - - -
- - - - - * - -
- - - - - - - *
- * - - - - - -
- - - - - - * -
- - * - - - - -
- - - - * - - -
* - - - - - - -
- - - - - - - *
- - - * - - - -
- * - - - - - -
- - - - - - * -
- - * - - - - -
- - - - - * - -
- - - - * - - -
* - - - - - - -
- - - - - - - *
- - - - - * - -
- - * - - - - -
- - - - - - * -
- * - - - - - -
- - - * - - - -
- - - - * - - -
- * - - - - - -
- - - * - - - -
- - - - - * - -
- - - - - - - *
- - * - - - - -
* - - - - - - -
- - - - - - * -
- - - - * - - -
- * - - - - - -
- - - * - - - -
- - - - - - * -
- - * - - - - -
- - - - - - - *
- - - - - * - -
* - - - - - - -
- - - - * - - -
- * - - - - - -
- - - - - * - -
* - - - - - - -
- - - - - - * -
- - - * - - - -
- - - - - - - *
- - * - - - - -
- - - - * - - -
- * - - - - - -
- - - - - - - *
* - - - - - - -
- - - * - - - -
- - - - - - * -
- - * - - - - -
- - - - - * - -
- - - - * - - -
- - * - - - - -
* - - - - - - -
- - - - - * - -
- - - - - - - *
- * - - - - - -
- - - * - - - -
- - - - - - * -
- - - - * - - -
- - * - - - - -
* - - - - - - -
- - - - - - * -
- * - - - - - -
- - - - - - - *
- - - - - * - -
- - - * - - - -
- - - - * - - -
- - * - - - - -
- - - - - - - *
- - - * - - - -
- - - - - - * -
* - - - - - - -
- - - - - * - -
- * - - - - - -
- - - - * - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - - - - *
- - - - - * - -
- - - * - - - -
- * - - - - - -
- - - - * - - -
- - - - - - * -
* - - - - - - -
- - - * - - - -
- * - - - - - -
- - - - - - - *
- - - - - * - -
- - * - - - - -
- - - - * - - -
- - - - - - * -
- * - - - - - -
- - - * - - - -
- - - - - - - *
* - - - - - - -
- - * - - - - -
- - - - - * - -
- - - - * - - -
- - - - - - * -
- * - - - - - -
- - - - - * - -
- - * - - - - -
* - - - - - - -
- - - * - - - -
- - - - - - - *
- - - - * - - -
- - - - - - * -
- * - - - - - -
- - - - - * - -
- - * - - - - -
* - - - - - - -
- - - - - - - *
- - - * - - - -
- - - - * - - -
- - - - - - * -
- - - * - - - -
* - - - - - - -
- - * - - - - -
- - - - - - - *
- - - - - * - -
- * - - - - - -
- - - - * - - -
- - - - - - - *
- - - * - - - -
* - - - - - - -
- - * - - - - -
- - - - - * - -
- * - - - - - -
- - - - - - * -
- - - - * - - -
- - - - - - - *
- - - * - - - -
* - - - - - - -
- - - - - - * -
- * - - - - - -
- - - - - * - -
- - * - - - - -
- - - - - * - -
* - - - - - - -
- - - - * - - -
- * - - - - - -
- - - - - - - *
- - * - - - - -
- - - - - - * -
- - - * - - - -
- - - - - * - -
- * - - - - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - * - - -
- - - - - - - *
- - - * - - - -
- - - - - * - -
- * - - - - - -
- - - - - - * -
* - - - - - - -
- - - * - - - -
- - - - - - - *
- - - - * - - -
- - * - - - - -
- - - - - * - -
- - * - - - - -
* - - - - - - -
- - - - - - * -
- - - - * - - -
- - - - - - - *
- * - - - - - -
- - - * - - - -
- - - - - * - -
- - * - - - - -
* - - - - - - -
- - - - - - - *
- - - * - - - -
- * - - - - - -
- - - - - - * -
- - - - * - - -
- - - - - * - -
- - * - - - - -
* - - - - - - -
- - - - - - - *
- - - - * - - -
- * - - - - - -
- - - * - - - -
- - - - - - * -
- - - - - * - -
- - * - - - - -
- - - - * - - -
- - - - - - * -
* - - - - - - -
- - - * - - - -
- * - - - - - -
- - - - - - - *
- - - - - * - -
- - * - - - - -
- - - - * - - -
- - - - - - - *
* - - - - - - -
- - - * - - - -
- * - - - - - -
- - - - - - * -
- - - - - * - -
- - * - - - - -
- - - - - - * -
- * - - - - - -
- - - * - - - -
- - - - - - - *
* - - - - - - -
- - - - * - - -
- - - - - * - -
- - * - - - - -
- - - - - - * -
- * - - - - - -
- - - - - - - *
- - - - * - - -
* - - - - - - -
- - - * - - - -
- - - - - * - -
- - * - - - - -
- - - - - - * -
- - - * - - - -
* - - - - - - -
- - - - - - - *
- * - - - - - -
- - - - * - - -
- - - - - * - -
- - - * - - - -
* - - - - - - -
- - - - * - - -
- - - - - - - *
- * - - - - - -
- - - - - - * -
- - * - - - - -
- - - - - * - -
- - - * - - - -
- * - - - - - -
- - - - - - - *
- - - - * - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - - * - -
- - - * - - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - * - - -
- * - - - - - -
- - - - - - - *
- - - - - * - -
- - - * - - - -
- - - - - - * -
* - - - - - - -
- - - - - - - *
- * - - - - - -
- - - - * - - -
- - * - - - - -
- - - - - * - -
- - - - - - - *
- * - - - - - -
- - - * - - - -
* - - - - - - -
- - - - - - * -
- - - - * - - -
- - * - - - - -
- - - - - - * -
* - - - - - - -
- - * - - - - -
- - - - - - - *
- - - - - * - -
- - - * - - - -
- * - - - - - -
- - - - * - - -
- - - - - - * -
- * - - - - - -
- - - * - - - -
* - - - - - - -
- - - - - - - *
- - - - * - - -
- - * - - - - -
- - - - - * - -
- - - - - - * -
- * - - - - - -
- - - - - * - -
- - * - - - - -
* - - - - - - -
- - - * - - - -
- - - - - - - *
- - - - * - - -
- - - - - - * -
- - * - - - - -
* - - - - - - -
- - - - - * - -
- - - - - - - *
- - - - * - - -
- * - - - - - -
- - - * - - - -
- - - - - - * -
- - * - - - - -
- - - - - - - *
- * - - - - - -
- - - - * - - -
* - - - - - - -
- - - - - * - -
- - - * - - - -
- - - - - - * -
- - - * - - - -
- * - - - - - -
- - - - * - - -
- - - - - - - *
* - - - - - - -
- - * - - - - -
- - - - - * - -
- - - - - - * -
- - - * - - - -
- * - - - - - -
- - - - - - - *
- - - - - * - -
* - - - - - - -
- - * - - - - -
- - - - * - - -
- - - - - - * -
- - - - * - - -
- - * - - - - -
* - - - - - - -
- - - - - * - -
- - - - - - - *
- * - - - - - -
- - - * - - - -
- - - - - - - *
- * - - - - - -
- - - * - - - -
* - - - - - - -
- - - - - - * -
- - - - * - - -
- - * - - - - -
- - - - - * - -
- - - - - - - *
- * - - - - - -
- - - - * - - -
- - * - - - - -
* - - - - - - -
- - - - - - * -
- - - * - - - -
- - - - - * - -
- - - - - - - *
- - * - - - - -
* - - - - - - -
- - - - - * - -
- * - - - - - -
- - - - * - - -
- - - - - - * -
- - - * - - - -
- - - - - - - *
- - - * - - - -
* - - - - - - -
- - * - - - - -
- - - - - * - -
- * - - - - - -
- - - - - - * -
- - - - * - - -