Java二维数组对角线
我写了一个程序试图解决8皇后问题,其中一部分要求我测试所有的前后对角线,以确保没有冲突。我得到了完美的反向工作,但这一部分的向前一个是返回真实的,而我正在测试,我真的不明白为什么。我们将非常感谢您的帮助:)
class NonAttackingQueen {
static char [][] board = { {'X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'},
{'X','Q','X','X','X','X','X','X'},
{'Q','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'} };
public static boolean diagonalsClear () {
int numQueens;
boolean clear = true;
for (int numSpots = 1; numSpots < 9; numSpots++) {
numQueens = 0;
for (int row = 0; row < numSpots - 1; row++) {
if (board[row][numSpots - 1 - row] == 'Q')
numQueens++;
}
if (numQueens > 1) {
clear = false;
break;
}
}
for (int numSpots = 7; numSpots > 0; numSpots--) {
numQueens = 0;
for (int row = 7; row > 7 - numSpots; row--) {
if (board[row][15-row-numSpots] == 'Q')
numQueens++;
}
if (numQueens > 1) {
clear = false;
break;
}
return clear;
}
}
# 1 楼答案
解决这个问题的小技巧。很明显,您在计算矩阵
row
和column
索引时有错误,并且您的循环没有覆盖其中的所有单元格。最简单的检查方法就是把它打印到控制台上。我可以看出,你对for (int row = 0; row < numSpots - 1; row++)
有问题。第一次迭代,当numSpots=1
它跳过这个循环。正确的是for (int row = 0; row <= numSpots - 1; row++)
让我给你一些关于你的例子的笔记。我可以看到矩阵的两个上下部分,你用相反的方向检查,上部分从
row=0
开始,下部分从col=0
开始。我认为做同样的计算对理解更好。您可以将任务分解为三个简单的部分:row
和column
开始李>我认为下面的例子更适合阅读: