0
私は掃海艇の試合をしようとしていましたが、爆弾に隣接するセルが見つかるまで、隣接するセルを再帰的に表示します。私は座標xとyを与えれば、それを取り巻く鉱山の数を計算するという方法があります。掃海掲示板に鉱山を再帰的にマッピングする
// Counts how many mines are adjacent to a given coordinate cell if any
void board::mineCount(int x, int y) {
// North
if (y > 0) {
if (board[x][y - 1].hasMine) {
board[x][y].mineCount++;
}
}
// South
if (y < dimensions[1] - 1) {
if (board[x][y + 1].hasMine) {
board[x][y].mineCount++;
}
}
// East
if (x < dimensions[0] - 1) {
if (board[x + 1][y].hasMine) {
board[x][y].mineCount++;
}
}
// West
if (x > 0) {
if (board[x - 1][y].hasMine) {
board[x][y].mineCount++;
}
}
// North East
if (x < dimensions[0] - 1 && y > 0) {
if (board[x + 1][y - 1].hasMine) {
board[x][y].mineCount++;
}
}
// North West
if (x > 0 && y > 0) {
if (board[x - 1][y - 1].hasMine) {
board[x][y].mineCount++;
}
}
// South East
if (x < dimensions[0] - 1 && y < dimensions[1] - 1) {
if (board[x + 1][y + 1].hasMine) {
board[x][y].mineCount++;
}
}
// South West
if (x > 0 && y < dimensions[1] - 1) {
if (board[x - 1][y + 1].hasMine) {
board[x][y].mineCount++;
}
}
}
各セルは1鉱山、それに隣接して見出されるたびにインクリメントされますmineCount
フィールドを有する構造体です。私は再帰論理がどこに行くのか分かりません。私は次のようなことを試みました:
// North
if (y > 0) {
if (board[x][y - 1].hasMine) {
board[x][y].mineCount++;
} else {
minecount(x, y-1);
}
}
各位置については役に立たない。任意のポインタが評価されるだろう。
あなたが試した再帰の動作は何ですか?それについて何が間違っていましたか? – Tyler
無関係:あなた自身の努力を惜しまないで、開始時に各グリッド座標のminecountを1回計算します。このロジックを大幅に削減し、バグや解決策を見つけやすくする必要があります。 – user4581301