题目描述:

Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.

Find the maximum area of an island in the given 2D array. (If there is no island, the maximum area is 0.)

Example 1:

[[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]]

Given the above grid, return 6. Note the answer is not 11, because the island must be connected 4-directionally.

Example 2:

[[0,0,0,0,0,0,0,0]]

Given the above grid, return 0.

Note: The length of each dimension in the given grid does not exceed 50.

要完成的函数:

int maxAreaOfIsland(vector<vector<int>>& grid)

说明:

1、给定一个二维矩阵,其中只含有0和1,0表示水域,1表示陆地,要求返回这片地方中最大的一块陆地的面积。

2、这其实是一道深度优先搜索或者广度优先搜索的题目。

由于DFS要用到递归,比较麻烦,所以笔者选择了BFS来实现,定义了一个队列。

代码如下:(附详解)

    int maxAreaOfIsland(vector<vector<int>>& grid)
{
queue<int>q1;
int hang=grid.size(),lie=grid[0].size(),sum=0,sum1=0,i=0,j=0,t1=0,t2=0;
while(i<hang)//每一行的处理
{
while(j<lie)//每一列的处理
{
if(grid[i][j]==1)//如果搜索到一个1了
{
q1.push(i);//把行坐标塞到队列里面去
q1.push(j);//把列坐标塞到队列里面去
grid[i][j]=0;//并将这个点改为陆地,避免后面再次搜索到,重复计算
sum1=0;//统计当前陆地的面积
while(!q1.empty())//当队列非空时,迭代处理
{
t1=q1.front();//取出行坐标
q1.pop();
t2=q1.front();//取出列坐标
q1.pop();
sum1++;
if(t1-1>=0&&grid[t1-1][t2]==1)//判断上方有没有陆地
{
q1.push(t1-1);
q1.push(t2);
grid[t1-1][t2]=0;//置为0,避免再次搜索到,重复计算
}
if(t1+1<hang&&grid[t1+1][t2]==1)//判断下方有没有陆地
{
q1.push(t1+1);
q1.push(t2);
grid[t1+1][t2]=0;
}
if(t2-1>=0&&grid[t1][t2-1]==1)//判断左方有没有陆地
{
q1.push(t1);
q1.push(t2-1);
grid[t1][t2-1]=0;
}
if(t2+1<lie&&grid[t1][t2+1]==1)//判断右方有没有陆地
{
q1.push(t1);
q1.push(t2+1);
grid[t1][t2+1]=0;
}
}
sum=max(sum,sum1);//取每次陆地面积的最大值
}
j++;
}
i++;
j=0;//j=0记得要加上
}
return sum;
}

上述代码实测30ms,beats 80.17% of cpp submissions。

leetcode-695-Max Area of Island(BFS)的更多相关文章

  1. LeetCode 695. Max Area of Island (岛的最大区域)

    Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...

  2. [Leetcode]695. Max Area of Island

    Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...

  3. leetcode 695 Max Area of Island 岛的最大面积

    这个题使用深度优先搜索就可以直接遍历 DFS递归方法: class Solution { public: vector<vector<,},{,-},{,},{,}}; int maxAr ...

  4. leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions

    两种方式处理已经访问过的节点:一种是用visited存储已经访问过的1:另一种是通过改变原始数值的值,比如将1改成-1,这样小于等于0的都会停止. Number of Islands 用了第一种方式, ...

  5. 【leetcode】Max Area of Island

    国庆中秋长假过完,又要开始上班啦.先刷个题目找找工作状态. Given a non-empty 2D array grid of 0's and 1's, an island is a group o ...

  6. 【LeetCode】695. Max Area of Island 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:DFS 方法二:BFS 日期 题目地址:ht ...

  7. [leetcode]python 695. Max Area of Island

    Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...

  8. 695. Max Area of Island最大岛屿面积

    [抄题]: 求最多的联通的1的数量 Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (repre ...

  9. 200. Number of Islands + 695. Max Area of Island

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

随机推荐

  1. innodb count优化测试

    对于索引优化真的是门课题,先来研究下最平常的问题,innodb引擎下 怎么让count(*)快一点. 首先需要清楚 innodb 默认是对主键建立聚簇索引,如果没有主键,那就是对具有唯一且非空值的索引 ...

  2. ie11的仿真模式

    1>在ie11的仿真模式中,所有版本的按钮都失效,解决方法:再ie的配置中,选项-高级-重置,然后重启ie11 程序员的基础教程:菜鸟程序员

  3. Linux confluence5.8.10 wiki安装

    选择首先需要java环境 其次需要mysql mysql安装请参考: http://www.cnblogs.com/syuf/p/7818710.html 安装好mysql之后,创建一个库 # mys ...

  4. spring property标签中的 ref属性和ref 标签有什么不同? 如下:<property name="a" ref="b" />

    spring property标签中的 ref属性和ref 标签有什么不同? 如下:<property name="a" ref="b" /> sp ...

  5. C程序设计语言(2)文摘

    第一章 导言 1.1 入门 1.2 变量与算术表达式 1.3 for语句 1.4 符号常量 1.5 字符输入输出 #include "stdafx.h" main(int argc ...

  6. 一条java开发工程师的升级路线,从初级到无语言障碍

    看了一篇文章,讲述的是如何进行后端开发升级,现在分享下,我的总结,感谢写文章的作者大大,觉得他很会坚持,虽然一直在骂人,但是,我觉得人最大的敌人就是懒惰,所以骂得好 现在写下我的总结,希望对有志者有帮 ...

  7. python使用git进行版本控制-分支管理

    1.远程克隆 最好的方式是先创建远程库,然后,从远程库克隆: 首先在github上创建一个新的仓库,名字叫gitskills 我们勾选Initialize this repository with a ...

  8. dojo和jquery混合使用

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/dojo/1.7 ...

  9. 桥接模式及C++实现

    桥接模式 先说说桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式之一,关键就是这个抽象和实 ...

  10. Ubuntu的常识使用了解2

    1. 在linux系统中,所有的目录(分区)都是挂靠在/跟目录下. 使用「cd」这个指令来切換目录.切换目录的方式:(1)绝对路径,以根目录做开头/, (2)相对目录, 没有以根目录开头. 注意:插补 ...