【发布时间】:2023-03-28 17:39:01
【问题描述】:
我正在用 Java 做一个 N Queens 程序。我能够打印每个皇后位于不同行和列的所有解决方案。现在我需要跟踪碰撞的对角线。所以二维数组上有 2n-1 条对角线。该算法希望我们在棋盘上有 2n-1 条负对角线和 2n-1 条正对角线。有一个大小为 2n-1 的数组,称为 d1,它跟踪 2n-1 条负对角线上的每一条上的皇后数,即碰撞次数。如果第 m 条负对角线上有 k 个皇后,则这条对角线上有 k-1 个碰撞。这 数字 k 被写入 d1 数组的第 m 个元素。同样,我们为 2n-1 条正对角线选择另一个大小为 2n-1 的数组,称为 d2。
这是我的 D2 方法,但我完全迷失了。我知道所有向上的对角线都是 row + col,但就是这样。
public void D2(){
int[] upDiag = new int[2*board.length - 1];
int numberOfCollisions = 0;
for(int row = 0; row < board.length; row++){
for(int col = 0; col < board.length; col++){
if(isQueen(row, col)){
upDiag[numberOfCollisions++];
}
}
}
}
【问题讨论】:
标签: java multidimensional-array n-queens