来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
思路:
1、线性遍历二维数组的所有数据
2、遇到1时,岛屿数目+1,开始深度优先遍历找到整个岛屿,并在遍历过程中把找到的陆地置为0
3、深度优先算法 使用
代码
class Solution { public void dfs(char[][] grid,int r,int c){ if(r<0||c<0||r>=grid.length||c>=grid[0].length||grid[r][c]=='0') { return; } grid[r][c] = '0'; dfs(grid,r-1,c); dfs(grid,r+1,c); dfs(grid,r,c-1); dfs(grid,r,c+1); } public int numIslands(char[][] grid) { int count = 0; for(int i=0;i<grid.length;i++) { for(int j=0;j<grid[0].length;j++) { if(grid[i][j]=='1') { count++; dfs(grid,i,j); } } } return count; } }