-1
ここではこの方法があります。理想的には、Qsをボードに置くことによって8クイーンの問題を解決し、互いに脅かさないようにする必要がありますが、無限に再帰するのを止めることはできません。 この再帰メソッドからスタックオーバーフローを取得していますか?
public static boolean isSafe(int row, int col, int size, char[][] array) {
//check column
for (int i = 0; i < size - 1; i++) {
if (array[i][col] == 'Q') {
return false;
}
}
//horizontal
for (int i = size - 1; i >= 0; i--) {
if (array[row][i] == 'Q') {
return false;
}
}
//up diagonal
while (row > 0 && col > 0) {
int x = row;
int y = col;
if (array[row - 1][col - 1] == 'Q') {
return false;
} else {
x--;
y--;
}
}
//down diagonal
while (row < size - 1 && col > 0) {
int x = row;
int y = col;
if (array[row + 1][col - 1] == 'Q') {
return false;
} else {
x++;
y--;
}
}
return true;
}
は、あなたがこれに当てることができます任意の光をありがとう:
public static void solve(int row, int col, int size, char[][] array) {
for (int i = 0; i < size - 2; i++) {
if (isSafe(row, col, size, array)) {
array[i][col] = 'Q';
} else {
if (col < size - 2) {
solve(row, col++, size, array); //changed ++ to +1
}
}
}
}
は明確にするために、ここに含ま 'isSafe' メソッドです。
EDIT: '++'を '+1'に変更するとスタックのオーバーフローを止めることができたが、私のメソッドはそれが欲しいように再帰しないことが分かった。
[デバッガとは何ですか?]問題の診断にはどのように役立ちますか?(http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-問題を特定することはできません) – Raedwald
"私はそれが欲しいのと同じように[sic]を再帰しません"という問題はありません。出力とデバッグトレースを表示します。 – Prune