
public int solve(char[][] grid) {
//边界条件判断
if (grid == null || grid.length == 0) {
return 0;
}
//统计岛屿的个数
int count = 0;
//两个for循环遍历每一个格子
for (int row = 0; row < grid.length; row++) {
for (int col = 0; col < grid[0].length; col++) {
//只有当前格子是1才开始计算
if (grid[row][col] == '1') {
//如果当前格子是1,岛屿的数量加1
count++;
//然后通过dfs把当前格子的上下左右4个位置为1的都要置为0,因为他们是连着一起的算一个岛屿
dfs(grid, row, col);
}
}
}
//最后返回岛屿的数量
return count;
}
/**
* 把当前格子以及他邻近的为1的格子都会置为1
*
* @param grid
* @param row
* @param col
*/
public void dfs(char[][] grid, int row, int col) {
//边界条件判断,不能越界
if (row < 0 || row >= grid.length || col < 0 || col >= grid[0].length || grid[row][col] == '0') {
return;
}
//把当前格子置为0,然后再从他的上下左右4个方向继续遍历,因为相连着的岛屿只能算一个岛屿
grid[row][col] = '0';
//上
dfs(grid, row - 1, col);
//下
dfs(grid, row + 1, col);
//左
dfs(grid, row, col + 1);
//右
dfs(grid, row, col - 1);
}
public static void main(String []args){
int [][]num={{1,2,3,4},{4,5,6,7}};
System.out.println(num.length);
System.out.println(num[0].length);
}