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); } } };