import java.util.*;
public class Solution {
/**
* 判断岛屿数量
* @param grid char字符型二维数组
* @return int整型
*/
int count = 0;//岛屿的数量
//广度优先搜索,把每个发现的陆地点如果相邻也是陆地则置为0,最后数组全部为0
void bfs(char[][] grid, int x, int y) {
//如果遇到边界或遇到海洋则结束
if (x < 0 || y < 0 || x >= grid.length || y >= grid[0].length || grid[x][y] == '0') {
return;
}
//按照左下右上的顺序扩展
//发现陆地点则进行bfs
if (grid[x][y] == '1') {
grid[x][y] = '0';
if (x > 0 && grid[x - 1][y] == '1') {
bfs(grid, x - 1, y);
}
if (y > 0 && grid[x][y - 1] == '1') {
bfs(grid, x, y - 1);
}
if (x < grid.length - 1 && grid[x + 1][y] == '1') {
bfs(grid, x + 1, y);
}
if (y < grid[0].length - 1 && grid[x][y + 1] == '1') {
bfs(grid, x, y + 1);
}
}
}
public int solve(char[][] grid) {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
if (grid[i][j] == '1') {
//发现陆地点,则岛屿数+1,对陆地点周围进行清零操作
bfs(grid, i, j);
count++;
}
}
}
return count;
}
}