水域大小

class Solution {
public:
    vector<int> res;
    vector<int> pondSizes(vector<vector<int>>& land) {
        vector<vector<bool>> visit(land.size(),vector<bool>(land[0].size(),false));
        for(int i=0;i<land.size();i++)
        {
            for(int j=0;j<land[i].size();j++)
            {
                if(!visit[i][j] && land[i][j]==0)
                {
                    int count=0;
                    DFS(land,visit,i,j,count);
                    res.push_back(count);
                }
            }
        }
        sort(res.begin(),res.end());
        return res;
    }
    void DFS(vector<vector<int>>&land,vector<vector<bool>>&visit,int i,int j,int&  count)
    {
        visit[i][j]=true;
        count+=1;
        if(j-1>=0 && land[i][j-1]==0 && visit[i][j-1]==false)
        {
            DFS(land,visit,i,j-1,count);
        }
        if(j+1<land[0].size() && land[i][j+1]==0 && visit[i][j+1]==false)
        {
            DFS(land,visit,i,j+1,count);
        }
        if(i-1>=0 && land[i-1][j]==0 && visit[i-1][j]==false)
        {
            DFS(land,visit,i-1,j,count);
        }
        if(i+1<land.size() && land[i+1][j]==0 && visit[i+1][j]==false)
        {
            DFS(land,visit,i+1,j,count);
        }
        if(j-1>=0 && i-1>=0 && land[i-1][j-1]==0 && visit[i-1][j-1]==false)
        {
            DFS(land,visit,i-1,j-1,count);
        }
        if(j+1<land[0].size() && i-1>=0 && land[i-1][j+1]==0 && visit[i-1][j+1]==false)
        {
            DFS(land,visit,i-1,j+1,count);
        }
        if(j-1>=0 && i+1<land.size() && land[i+1][j-1]==0 && visit[i+1][j-1]==false)
        {
            DFS(land,visit,i+1,j-1,count);
        }
        if(j+1<land[0].size() && i+1<land.size() && land[i+1][j+1]==0 && visit[i+1][j+1]==false)
        {
            DFS(land,visit,i+1,j+1,count);
        }
    }
};

每天进步一点点~
原文地址:https://www.cnblogs.com/libin123/p/15237689.html