代码如下,请帮我解一下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
.......
.##....
.##....
....##.
..####.
...###.
.......
*/
不知道你这个问题是否已经解决, 如果还没有解决的话: