我试图完成我的家庭作业项目并寻求帮助以找到错误。我正在使用回溯算法来找到 N 皇后问题的所有解决方案。我主要关心的是我的冲突方法——它在堆栈类中。其目的是检测被传递的皇后对象(冲突方法的参数 1)是否与棋盘上的任何其他皇后在同一行、列或对角线上。传递给冲突方法的 Queen 对象存储在 Queen 类中,并借助 Point 类的实例记录其位置。我的代码在我创建的 Queen 类中使用了两个方法,public int getRow() 和 public int getColumn()。两者都返回一个 int。第二个参数是一个名为 board 的二维数组(或数组数组)。已经在棋盘上的皇后在这个数组中用布尔值 true 表示。
Solution.n 是对另一个类中的静态 int 变量的引用。它的值表示棋盘的边缘。示例...对于 8-Queens 问题,我们创建一个大小为 8 的二维数组。Solution.n 减 1 以等于二维数组的最后一个索引。
这是代码:
public boolean conflict(Queen x, boolean [][] board) //conflict method
{
if(checkColumn(x, board) == false)
return true; //conflict
else if(checkRow(x, board) == false)
return true; //conflict
else if(checkDiagonal(x, board) == false )
return true; //conflict
else
return false; //no conflict on board
}
private boolean checkColumn(Queen x, boolean [][] board)//returns true when column is safe
{
int col = x.getColumn();
for(int row = 0; row <= Solution.n; row++)
{
if(board[row][col] == true) //queen is in this column
{
return false;
}
}
return true;
}
private boolean checkRow(Queen x, boolean [][] board) //returns true when row is safe
{
int row = x.getRow();
for(int col = 0; col <= Solution.n; col++)
{
if(board[row][col] == true) //queen is in this row
{
return false;
}
}
return true;
}
private boolean checkDiagonal(Queen location, boolean [][] board) //returns true when diagonal is safe
{
int row, col;
row = location.getRow() - 1;
col = location.getColumn() - 1;
while(row >=0 && col >= 0) //iterate down-left
{
if(board[row][col] == true) //queen found?
{
return false;
}
row--;
col--;
}
row = location.getRow() - 1;
col = location.getColumn() + 1;
while(row != -1 && col <= Solution.n) //iterate down-right
{
if(board[row][col] == true) //queen found?
{
return false;
}
row--;
col++;
}
row = location.getRow() + 1;
col = location.getColumn() + 1;
while(row <= Solution.n && col <= Solution.n) //iterate up-right
{
if(board[row][col] == true) //queen found?
{
return false;
}
row++;
col++;
}
row = location.getRow() +1;
col = location.getColumn()-1;
while(row <= Solution.n && col != -1) //iterate up-left
{
if(board[row][col] == true) //queen found?
{
return false;
}
row++;
col--;
}
return true;
}
我确信这段代码包含一个错误,但如果我错了,我很抱歉浪费你的时间:P
您的帮助将不胜感激。谢谢!:D