https://leetcode-cn.com/problems/number-of-islands/submissions/
[bug]
class Solution {
char[][] grid;
int w, h;
boolean[][] visited;
int[][] dirs = {{-1,0}, {1,0}, {0,-1}, {0,1}};
public int numIslands(char[][] grid) {
this.grid = grid;
w = grid[0].length;
h = grid.length;
visited = new boolean[h][w];
int cnt=0;
for(int y=0;y<h;y++){
for(int x=0;x<w;x++){
if(visited[y][x] || grid[y][x]=='0'){
continue;
}
dfs(y, x, new HashSet<>());
cnt++;
}
}
return cnt;
}
void dfs(int y, int x, Set path){
if(grid[y][x]=='0'){
return;
}
visited[y][x] = true;
path.add(y*w+x);
for(int[] dir: dirs){
int y2 = y + dir[0];
int x2 = x + dir[1];
if(bound(y2, x2)){
continue;
}
if(grid[y2][x2]=='0'){
continue;
}
if(path.contains(y*w+x)){
continue;
}
dfs(y2, x2, path);
}
path.remove(y*w+x);
}
boolean bound(int y, int x){
return y<0 || y>=h || x<0 || x>=w;
}
}