Java NQueens递归程序中的逻辑错误
我正在使用java,并试图制作一个使用递归来解决NQueens难题的程序。问题是它在不应该的时候给了我true(例如3应该返回false,因为你可以取消3x3网格)。每件事我都看了很多遍,但我找不到哪里出了问题。有人知道吗Java NQueens递归程序中的逻辑错误,java,function,methods,recursion,Java,Function,Methods,Recursion,我正在使用java,并试图制作一个使用递归来解决NQueens难题的程序。问题是它在不应该的时候给了我true(例如3应该返回false,因为你可以取消3x3网格)。每件事我都看了很多遍,但我找不到哪里出了问题。有人知道吗 package model; public class NQueensModel { private int myNumsQueen; private boolean[][] myBoard; private static NQueensModel
package model;
public class NQueensModel
{
private int myNumsQueen;
private boolean[][] myBoard;
private static NQueensModel myModel = new NQueensModel(3);
public static void main (String[] args) {
System.out.println(myModel.solvePuzzle());
}
public NQueensModel(int nQueens)
{
myNumsQueen = nQueens;
myBoard = new boolean[myNumsQueen][myNumsQueen];
}
public boolean solvePuzzle()
{
return this.solvePuzzle(myNumsQueen);
}
private boolean solvePuzzle(int ncolumn)
{
if(ncolumn>myNumsQueen)
{
return true;
}
int i;
for( i =0; i<myBoard.length;i++)
{
if(this.isSafeMove(i, ncolumn)==true)
{
myBoard[i][ncolumn-1]=true;
if(this.solvePuzzle(ncolumn+1)==true)
{
return true;
}
myBoard[i][ncolumn]=false;
}
}
return false;
}
private boolean isSafeMove(int row, int col)
{
for(int i=0; i<myBoard[row].length; i++)
{
if(myBoard[row][i]==true)
{
return false;
}
}
for(int i = 0; i<myBoard.length; i++)
{
if(myBoard[i][col-1]==true)
{
return false;
}
}
if(this.checkLowerDiag(row, col)==true)
{
return false;
}
if(this.checkUpperDiag(row, col)==true)
{
return false;
}
if(this.checkLeft(row,col)==true)
{
return false;
}
else
{
return true;
}
}
private boolean checkUpperDiag(int row, int col)
{
if(row==0)
{
return true;
}
else if(col==myBoard[0].length)
{
if (myBoard[row-1][col-2]==true)
{
return true;
}
else
{
return false;
}
}
else if(myBoard[row-1][col-2]==true || myBoard[row-1][col]==true)
{
return true;
}
else
{
return false;
}
}
private boolean checkLowerDiag(int row, int col)
{
if(col==1 && myBoard[row][col]==true)
{
return true;
}
else if(col == myBoard[0].length)
{
if(myBoard[row+1][col-2]==true)
{
return true;
}
else
{
return false;
}
}
else if(row == myBoard.length)
{
return true;
}
else if(myBoard[row+1][col-2]==true || myBoard[row+1][col]==true)
{
return true;
}
else
{
return false;
}
}
private boolean checkLeft(int row, int col)
{
if(myBoard[row][col-1]==true)
{
return true;
}
else
{
return false;
}
}
private boolean placeQueen(int row, int col)
{
myBoard[row][col] = true;
return true;
}
private boolean removeQueen(int row, int col)
{
myBoard[row][col] = false;
return false;
}
// public String toString()
// {
//
// }
}
包模型;
公共类模型
{
密努姆斯奎因私人酒店;
私有布尔[][]myBoard;
私有静态NQueensModel myModel=新的NQueensModel(3);
公共静态void main(字符串[]args){
System.out.println(myModel.solvePuzzle());
}
公共NQueensModel(intnqueens)
{
myNumsQueen=nQueens;
myBoard=新布尔值[myNumsQueen][myNumsQueen];
}
公共布尔解谜()
{
返回此.solvePuzzle(myNumsQueen);
}
私有布尔解算器(int-ncolumn)
{
如果(n列>myNumsQueen)
{
返回true;
}
int i;
对于(i=0;i@user2864740CodeReview用于同行评审工作代码。修复bug和查找错误是StackOverflow的工作基础…@retailcoder我并没有在主题中找到“一般程序逻辑错误”。更不用说需要滚动了。