Max Area of Island(C++岛屿的最大面积)
解题思路:
(1)利用栈(stack)来进行深度遍历(dfs)
class Solution {
public:
void helper(vector<int> &v,vector<vector<int>> &d,vector<int> &vis,vector<vector<int>>& grid,
stack<pair<int,int>> &s,int x,int y,int m,int n,int &sum) {
sum += grid[x][y];
vis[x*n+y] = 1;
for(int i=0;i<d.size();i++) {
if(0<=x+d[i][0] && x+d[i][0]<m && 0<=y+d[i][1] &&
y+d[i][1]<n && grid[x+d[i][0]][y+d[i][1]]==1 && vis[(x+d[i][0])*n+y+d[i][1]]==0) {
s.push(pair(x+d[i][0],y+d[i][1]));
}
}
while(!s.empty()) {
auto temp = s.top();
s.pop();
if(vis[temp.first*n+temp.second]==0)
helper(v,d,vis,grid,s,temp.first,temp.second,m,n,sum);
}
v.push_back(sum);
return;
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
int m = grid.size(),n=grid[0].size();
vector<int> v;
vector<int> vis(m*n,0);
vector<vector<int>> d={
{1,0},{-1,0},{0,1},{0,-1}};
int sum = 0;
for(int i=0;i<grid.size();i++) {
for(int j=0;j<grid[i].size();j++) {
sum=0;
if(grid[i][j]==1) {
stack<pair<int,int>> s;
helper(v,d,vis,grid,s,i,j,m,n,sum);
} else v.push_back(sum);
}
}
auto max_index = max_element(v.begin(),v.end())-v.begin();
return v[max_index];
}
};
还没有评论,来说两句吧...