LeetCode:Number of Islands DFS递归

题目描述

200. Number of Islands

解题思路

题中的矩阵横纵方向代表的不是岛,而是坐标,所以和LeetCode:Friend Circles 查并集那道题里的矩阵有点区别(当然两道题都是可以查并集,DFS,BFS解决的)
dfs的一个思路是:找到一个为‘1’的点,然后找到周围为’1‘的点,dfs可以把这个点所在的“岛”都找到,岛++,并将岛上的所有‘1’都换成‘0’,遍历矩阵去找下一个岛

代码

class Solution {
public:
    void dfs(int i,int j,int m,int n,vector<vector<char> >& grid){
        if(i<0||i>m-1||j<0||j>n-1||grid[i][j]!='1')
            return;
        else
            grid[i][j] = '0';
            dfs(i+1,j,m,n,grid);
            dfs(i-1,j,m,n,grid);
            dfs(i,j-1,m,n,grid);
            dfs(i,j+1,m,n,grid);

    }
    int numIslands(vector<vector<char>>& grid) {
        int count=0;
        if(grid.size()==0){
            return 0;
        }else{
            int m = grid.size();
            int n = grid[0].size();
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    if(grid[i][j]=='1'){
                        dfs(i,j,m,n,grid);
                        count++;
                    }
                }
            }
        }
        return count;

    }

};

猜你喜欢

转载自blog.csdn.net/armstrong_rose/article/details/80301798