gpt4 book ai didi

Java 2D 数组对角线

转载 作者:行者123 更新时间:2023-12-02 11:42:53 26 4
gpt4 key购买 nike

我编写了一个程序来尝试解决 8 个皇后问题,其中一部分要求我测试所有的前向和后向对角线以确保不存在冲突。我让后退完美地工作,但是在我测试时,前向的这一部分返回了 true,我真的不明白为什么。非常感谢您的帮助:)

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;
}
}

最佳答案

解决这个问题的小技巧。很明显,您的矩阵 row 有误和column索引计算,并且您的循环未覆盖其中的所有单元格。最简单的检查方法,只需将其打印到控制台即可。我可以看到,您对 for (int row = 0; row < numSpots - 1; row++) 有问题。第一次迭代,当 numSpots=1它跳过这个循环。正确的是for (int row = 0; row <= numSpots - 1; row++) .

让我给你一些关于你的例子的注释。我可以看到您以相反方向检查的矩阵的上部和下部两个部分,上部部分以 row=0 开头下一位 - col=0 。我认为做同样的计算更容易理解。您可以将任务分解为三个简单的任务:

  1. 检查一条对角线,从给定的 row 开始和column ;
  2. 检查上对角线;
  3. 检查下对角线。

我认为下面的例子更容易阅读:

private static boolean isDiagonalClear(int row, int col) {
int total = 0;

do {
if (board[row--][col++] == 'Q')
total++;
} while (total <= 1 && row >= 0 && col < 8);

return total <= 1;
}

public static boolean diagonalsClear() {
for (int row = 0; row < 7; row++)
if (!isDiagonalClear(row, 0))
return false;

for (int col = 0; col < 8; col++)
if (!isDiagonalClear(7, col))
return false;

return true;
}

关于Java 2D 数组对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48416244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com