0
これは私がお互いを攻撃することができないようにチェスボード上のクイーンの構成の数を見つけるよう求めているN-Queens
の問題を解決する私の再帰関数です。 validPosition
の助けを借りて、この関数は基底ケース(curRow == N)
をNの各値に対して適切な回数入力することに成功しました。しかし、この情報をどのように抽出するかは不明です。関数が基底ケースに10回入った場合、この関数は10を返す必要があります。再帰関数からベースケースのリターンを抽出するには?
しかし、ブール値を返すことは、再帰呼び出しを条件分岐する技術です。クリーンで一貫性のある方法でベースケースを正しい回数だけ入力し、その情報をルート関数呼び出しまで正常に伝播して呼び出し元に返しますか?
static boolean findNQueensSolutions(int N, int curRow, int[][] board, int result) {
if (curRow == N) {
return true;
}
for (int curCol = 0; curCol < N; curCol++) {
if (validPosition(board, curRow, curCol, N)) {
board[curRow][curCol] = 1;
if (findNQueensSolutions(N, curRow + 1, board, result)) {
return true;
}
board[curRow][curCol] = 0;
}
}
return false;
}
これが私の最初の方法であったが、私はどちらかうるさく、私が何を間違えiを識別することはできませんばかげ高い結果と巻き上げまたは1作っていましたが、今は動作します。ありがとう! –