200. 岛屿数量
作者:LeetCode
链接:https://leetcode-cn.com/problems/number-of-islands/solution/dao-yu-shu-liang-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

思路:因为每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。所以可以用深度优先搜索,每到一个值为1的点,就说明遇到陆地了,此时岛屿数量加一,之后向四个方向做深度优先搜索,把所有值为1的点设置为0(避免重复统计陆地数量)。假如dfs过程中遇到值为0的点,直接返回,不再dfs
class Solution {//思路看笔记
public int numIslands(char[][] grid) {
if (grid == null || grid.length == 0) {
return 0;
}
int hang=grid.length;
int lie=grid[0].length;//这里的是行,列数量
int sum=0;
for(int i=0;i<hang;i++)
for(int j=0;j<lie;j++)
{
if(grid[i][j]=='1') //遇到陆地,岛数量加一
sum++;
dfs(grid,i,j);//通过深度优先搜索,找到当前陆地所在岛的全部节点,并且设置为0
}
return sum;
}
public void dfs(char[][] grid,int hang,int lie)//这里的是下标
{
if(hang<0||hang>=grid.length||lie<0||lie>=grid[0].length||grid[hang][lie]=='0')
return;//过界,或者此点是海洋/已经被访问过,返回
grid[hang][lie]='0';//调用这个函数之前,i,j是1,所以才要设置为0
dfs(grid,hang-1,lie);
dfs(grid,hang+1,lie);
dfs(grid,hang,lie-1);
dfs(grid,hang,lie+1);
}
}

浙公网安备 33010602011771号