宽搜的正常思路,只不过每次加上计算岛屿数量cnt即可
class Solution {
public int numIslands(char[][] grid) {
int n = grid.length;
int m = grid[0].length;
int dx[] = new int[]{1, -1, 0, 0};
int dy[] = new int[]{0, 0, 1, -1};
boolean g[][] = new boolean[n][m];
Queue<int[]> q = new ArrayDeque<>();
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (g[i][j] == false && grid[i][j] == '1') {
q.add(new int[]{i, j});
g[i][j] = true;
while (!q.isEmpty()) {
boolean flag = false;
int t[] = q.poll();//弹出队头
for (int k = 0; k < 4; k++) {
int x = dx[k] + t[0];
int y = dy[k] + t[1];
if (x >= 0 && x < n && y >= 0 && y < m && grid[x][y] == '1') {
if (g[x][y] == false) {
q.add(new int[]{x, y});
g[x][y] = true;
} else {
flag = true;
}
}
}
if (flag == false) cnt++;
}
}
}
}
return cnt;
}
}