leetcode 200. 岛屿数量

# 思路
深度优先遍历
遍历整个数组,遇到1,ans++,ans是记录岛的个数的
运行一下dfs函数,把这个岛所有陆地给我沉喽,这个岛全部的1变成0
等把grid全遍历完,grid就全是0了,再把ans输出,这个ans就是我们记录的岛的个数
注意:grid竟然是char类型的,所有1和0都要加单引号哦

代码

class Solution {
public:
    void Dfs(vector<vector<char>>&grid,int curr_i,int curr_j)
    {
        //边界条件 超出之后,什么操作都不做
        if(curr_i<0||curr_i==grid.size()||curr_j<0||curr_j==grid[0].size()||grid[curr_i][curr_j]=='0')
        {
            return;
        }
        //进来的点先置为0
        grid[curr_i][curr_j] ='0'; 
        //定义方向数组  上下右左
        int dx[4] = {0,0,1,-1};
        int dy[4] = {1,-1,0,0};
        //查找每个单元格的上下左右进行递归
        for (int index = 0;index<4;index++)
        {
            Dfs(grid,curr_i+dx[index],curr_j+dy[index]);
        }
    }
    int numIslands(vector<vector<char>>& grid) {
    int result = 0;
    //遍历二维数组
    for(int i = 0;i<grid.size();i++)
    {
        for(int j = 0;j<grid[0].size();j++)
        {
            //只要找到有1的点就开始递归找到当前的岛屿
            if(grid[i][j]=='1')
            {
            result++;
            Dfs(grid,i,j);
            }
        }
    }
    return result;
    }
};

 

posted @ 2021-09-26 15:57  A-inspire  Views(39)  Comments(0Edit  收藏  举报