Max Area of Island(C++岛屿的最大面积)

分手后的思念是犯贱 2022-11-06 12:51 280阅读 0赞

解题思路:

(1)利用栈(stack)来进行深度遍历(dfs)

  1. class Solution {
  2. public:
  3. void helper(vector<int> &v,vector<vector<int>> &d,vector<int> &vis,vector<vector<int>>& grid,
  4. stack<pair<int,int>> &s,int x,int y,int m,int n,int &sum) {
  5. sum += grid[x][y];
  6. vis[x*n+y] = 1;
  7. for(int i=0;i<d.size();i++) {
  8. if(0<=x+d[i][0] && x+d[i][0]<m && 0<=y+d[i][1] &&
  9. 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) {
  10. s.push(pair(x+d[i][0],y+d[i][1]));
  11. }
  12. }
  13. while(!s.empty()) {
  14. auto temp = s.top();
  15. s.pop();
  16. if(vis[temp.first*n+temp.second]==0)
  17. helper(v,d,vis,grid,s,temp.first,temp.second,m,n,sum);
  18. }
  19. v.push_back(sum);
  20. return;
  21. }
  22. int maxAreaOfIsland(vector<vector<int>>& grid) {
  23. int m = grid.size(),n=grid[0].size();
  24. vector<int> v;
  25. vector<int> vis(m*n,0);
  26. vector<vector<int>> d={
  27. {1,0},{-1,0},{0,1},{0,-1}};
  28. int sum = 0;
  29. for(int i=0;i<grid.size();i++) {
  30. for(int j=0;j<grid[i].size();j++) {
  31. sum=0;
  32. if(grid[i][j]==1) {
  33. stack<pair<int,int>> s;
  34. helper(v,d,vis,grid,s,i,j,m,n,sum);
  35. } else v.push_back(sum);
  36. }
  37. }
  38. auto max_index = max_element(v.begin(),v.end())-v.begin();
  39. return v[max_index];
  40. }
  41. };

发表评论

表情:
评论列表 (有 0 条评论,280人围观)

还没有评论,来说两句吧...

相关阅读

    相关 695. 岛屿面积

    > 给定一个包含了一些 0 和 1 的非空二维数组 grid 。 > > 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者

    相关 695. 岛屿面积

    给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着