岛屿的最大面积(广度搜索,vector,queue队列leetcode695)-------------------c++java实现

岛屿的最大面积(广度搜索,vector,queue队列leetcode695)-------------------c++java实现,第1张

岛屿的最大面积(广度搜索,vector,queue队列leetcode695)-------------------c++/java实现 题目表述

给你一个大小为 m x n 的二进制矩阵 grid 。

岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。

你可以假设 grid 的四个边缘都被 0(代表水)包围着。

岛屿的面积是岛上值为 1 的单元格的数目。

计算并返回 grid 中最大的岛屿面积。

如果没有岛屿,则返回面积为 0 。

样例

s

条件

m == grid.length
n == grid[i].length
1 <= m, n <= 50
grid[i][j] 为 0 或 1

思路

广搜,记录最大值

注意点

先对gird判断再对visit判断

ac代码 c++:

可以把find函数写到maxareaofinland方法里,速度会快很多。

#include 
#include 
#include 
#include
#include
using namespace std;

class Solution {
public:
           int x1[4]={-1,0,1,0};
           int y1[4]={0,-1,0,1};//上左下右
    int find(vector<vector<int> > grid,vector<vector<int> > &visit,int r,int l){
//        cout<<"function enter:"<<"r:  "<
        int sum=1;
        int line=grid[0].size();
          int row=grid.size();
          int now;
        queue<int> q;
        visit[r][l]=1;
        q.push(r*line+l);
        while(!q.empty()){
            now=q.front();
            q.pop();
            for(int i=0;i<4;i++)
            {
                r=now/line+x1[i];
            l=now%line+y1[i];
            if(r>=0&&r<row&&l>=0&&l<line)
            if(grid[r][l]&&visit[r][l]==0){
                sum++;
                visit[r][l]++;
                q.push(r*line+l);
            }
            }
        }
//    cout<<"sum:   "<
    return sum;
    }
    int maxAreaOfIsland(vector<vector<int> >& grid) {

           int max=0,now;
          vector<vector<int> > visit(grid.size(),vector<int>(grid[0].size(),0));
          for(int i=0;i<grid.size();i++)
            for(int j=0;j<grid[0].size();j++)
              if(visit[i][j]==0&&grid[i][j]){
                now=find(grid,visit,i,j);
              if(now>max)max=now;
              }
              return max;

    }
    /↑为leetcode通过的代码


    void show(vector<vector<int> > x){
    for(int i=0;i<x.size();i++)
       {
        for(int j=0;j<x[0].size();j++)
        cout<<x[i][j]<<" ";
       cout<<endl;
       }
}
};

int main()
{
  vector<vector<int> > a(8,vector<int>(13));
  int x[8][13]= {{0,0,1,0,0,0,0,1,0,0,0,0,0},{0,0,0,0,0,0,0,1,1,1,0,0,0},{0,1,1,0,1,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,1,0,1,0,0},{0,1,0,0,1,1,0,0,1,1,1,0,0},{0,0,0,0,0,0,0,0,0,0,1,0,0},{0,0,0,0,0,0,0,1,1,1,0,0,0},{0,0,0,0,0,0,0,1,1,0,0,0,0}};
  for(int i=0;i<8;i++)
  for(int j=0;j<13;j++)
    a[i][j]=x[i][j];
  Solution s;
  s.show(a);
  int result;
//  memset(a,0,sizeof(a));
  result=s.maxAreaOfIsland(a);
  cout<<result<<endl;
  s.show(a);
    return 0;
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
著作权归领扣网络所有。

商业转载请联系官方授权,非商业转载请注明出处。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/673522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存