Java 级联显示的扫雷舰递归算法

Java 级联显示的扫雷舰递归算法,java,minesweeper,Java,Minesweeper,因此,我有一个方法,将在扫雷游戏级联显示的大部分。我有一个解决方案板和一个当前网格。但问题是,当我运行到0空间时,在递归调用时会出现堆栈溢出错误 有人有什么想法吗 public static void revealCell(int row, int col, char[][] grid, char[][] answers) { System.out.println(row + " " + col); if(row < 0|| row > 4){ Sys

因此,我有一个方法,将在扫雷游戏级联显示的大部分。我有一个解决方案板和一个当前网格。但问题是,当我运行到0空间时,在递归调用时会出现堆栈溢出错误

有人有什么想法吗

public static void revealCell(int row, int col, char[][] grid, char[][] answers) {
    System.out.println(row + " " + col);
    if(row < 0|| row > 4){
        System.out.println("bad");
        return;
    }
    if(col < 0|| col > 4){
        System.out.println("bad");
        return;
    }
    if(answers[row][col] == 'B'){
        grid[row][col] = answers[row][col];
        return;
    }
    if(answers[row][col] == '1'||answers[row][col] == '2'||answers[row][col] == '3'||answers[row][col] == '4'||answers[row][col] == '5'){
        grid[row][col] = answers[row][col];
        return;
    }

    if(answers[row][col] == '0'){
        System.out.println("go");
        grid[row][col] = answers[row][col];
        for(int i = row-1; i <= row +1; i++){
            for(int j = col-1; j<= col +1;j++){
                revealCell(i,j, grid, answers);
            }
        }
    }
}
publicstaticvoidrevealcell(int行、int列、char[][]网格、char[][]答案){
系统输出打印项次(行+列+列);
如果(行<0 | |行>4){
系统输出打印项次(“坏”);
返回;
}
if(col<0 | | col>4){
系统输出打印项次(“坏”);
返回;
}
如果(回答[行][col]==“B”){
网格[行][col]=答案[行][col];
返回;
}
如果(回答[行][col]=“1”|回答[行][col]=“2”|回答[行][col]=“3”|回答[行][col]=“4”|回答[行][col]=“5”){
网格[行][col]=答案[行][col];
返回;
}
如果(回答[行][col]=“0”){
System.out.println(“go”);
网格[行][col]=答案[行][col];

对于(int i=row-1;i这是因为围绕
revalcell()
的for会一次又一次地强制为同一个0单元格调用它。您可以跟踪已经访问过的单元格,并在调用
revalcell()
之前检查嵌套循环是否重复调用
revalcell(row,col,…)
。重新构造循环,或者如果i!=row&&j!=col,只需插入一个


在这个更改之后,您可能仍然有无限递归。我编写扫雷游戏已经有一段时间了,但是IIRC我使用了四个不同的递归调用,以避免重复检查相同的单元格:一个调用从地雷碰撞点开始搜索板的左上象限(增加行,减少列),其中一个搜索了右上象限(增加行,增加列),等等。

我想我找到了答案,我只是在递归调用另一个矩阵周围添加了if(grid[I][j]!=“0”)。