我写了一个程序试图解决8皇后问题,其中一部分要求我测试所有前后对角线,以确保没有冲突。我得到了向后工作的完美,但前进的那部分在我测试时恢复了真实,我真的无法弄清楚为什么。非常感谢帮助:)
var full_text = 'ID: ' + aData[2] + '\\n' + 'NAME: ' +aData[4] + '\\n' + 'CRNCY: ' +aData[5] + '\\n' + 'Type: ' +aData[6] + '\\n' + 'Type2: ' +aData[7] + '\\n' + 'Sector: ' +aData[8] + '\\n' + 'Industry: ' +aData[9] + '\\n' + 'Security: ' +aData[10] + '\\n' + 'Stype2: ' +aData[11] + '\\n';
答案 0 :(得分: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
开始; 我认为下面的例子更清楚:
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;
}