DFS--深度优先搜索补题报告
题目由coduck提供
一、目录
T1、
最大人工岛
二、讲解
T1题
时间限制:1秒 内存限制:128M
题目描述
在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地。进行填海之后,地图上最大的岛屿面积是多少?(上、下、左、右四个方向相连的 1 可形成岛屿)
输入描述
第一行输入两个整数n m(1 <= n,m <= 500 ),代表grid的高和长,
接下来的n行输入m个整数,代表岛屿或者水域
输出描述
输出一行一个整数,代表最大人工岛的面积。
样例
输入
2 2 1 0 0 1
输出
3
题目思路:
根据样例,DFS(深搜)时间复杂度大概是O(1250000)即1.25*10的6次方,距离时间限制还有8倍左右,但这只是DFS的时间,一旦有其他的2个嵌套循环时间就会爆掉(>10的7次方)。
题解思路:
就是用vis数组标记过以后,把这一整块儿就是它所有能够联通的区域标记为cnt,那么它就是第cnt块岛屿。同时定义一个temp,让他一直在每一次dfs时记录第cnt块岛屿的面积。记住,一定要在双层for循环遍历整个图的时候。及时清零。
综上所述,AC代码如下:
//部分为测试输入输出循环用的