给你一个大小为 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
著作权归领扣网络所有。
商业转载请联系官方授权,非商业转载请注明出处。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)