Java深度优先中的问题

img

img

代码如下,请帮我解一下flag的问题


 static int N=1010;        //定义全局变量N=1010
        static int[][] vis=new int[N][N];    //定义二维数组,存放是否访问过,访问过就标记
        static int flag=0;        
        static int[][] d= {{0,1}, {0,-1}, {1,0}, {-1,0}};    //定义方向下标
        public static void main(String[] args) {
            Scanner scan=new Scanner(System.in);
            int n=scan.nextInt();    //输入整数
            char[][] map=new char[n][n];    //定义二维数组
            for(int i=0;inext()).toCharArray();    //将当行值转换成char类型的数组                
            }
            int ans=0;        //答案
            for(int i=0;i//遍历二维数组的列
                for(int j=0;j//遍历二维数组的行
                    if(vis[i][j]==0 && map[i][j]=='#') {        //如果未被访问过并且存放内容的数组等于#号
                        flag=0;                //标记0
                        dfs(map,i,j);        //
                        if(flag==0) {
                            ans++;
                        }
                    }
                }
            }
            
            System.out.println(ans);
        }
        public static void dfs(char[][] map,int x,int y) {
            vis[x][y]=1;    //标记节点已被探查
            if(map[x][y+1]=='#' && map[x][y-1]=='#' &&            
                    map[x+1][y]=='#' && map[x-1][y]=='#') {        //如果符合条件就标记flag为1
                flag=1;
            }
            for(int i = 0; i < 4; i++){
                int nx = x + d[i][0], ny = y + d[i][1];    //定义nx,ny用于直接每一行都遍历直到符合#号被#号围城上下左右才计算完成一轮                                                            
                if(vis[nx][ny]==0 && map[nx][ny]=='#') {    //继续返回未被访问的节点,继续遍历
                    dfs(map,nx,ny);
                }
            }
        }
/*案例
7
.......
.##....
.##....
....##.
..####.
...###.
.......
*/
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^