【题目描述】
给你一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
https://leetcode.cn/problems/number-of-islands/
【示例】
【代码】深度优先
package com.company;
import java.util.*;
// 2023-04-23
class Solution {
public int numIslands(char[][] grid) {
int m = grid.length;
int n = grid[0].length;
int sum = 0;
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
if (grid[i][j] == '1'){
sum++;
dfs(grid, i, j, m, n);
}
}
}
System.out.println(sum);
return sum;
}
public void dfs(char[][] grid, int i, int j, int m, int n) {
if (i < 0 || j < 0 || i >= m || j >= n || grid[i][j] == '0')
return;
// 防止循环访问
grid[i][j] = '0';
dfs(grid, i + 1, j, m, n);
dfs(grid, i - 1, j, m, n);
dfs(grid, i, j + 1, m, n);
dfs(grid, i, j - 1, m, n);
}
}
public class Test {
public static void main(String[] args) {
new Solution().numIslands(new char[][]{{'1', '1', '1', '1', '0'}, {'1', '1', '0', '1', '0'},{'1', '1', '0', '0', '0'}, {'0', '0', '0', '0', '0'}});
new Solution().numIslands(new char[][]{{'1', '1', '0', '0', '0'}, {'1', '1', '0', '0', '0'},{'0', '0', '1', '0', '0'}, {'0', '0', '0', '1', '1'}});
}
}