寻找岛屿的周长
题目描述
实现一个算法找到岛屿的周长。介绍如下:
给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地, 0 表示水域。
网格单元在水平和垂直方向上连接。网格完全被水包围,并且网格上只有一个岛,岛上没有湖泊。
网格中一个单元是一个边长为 1 的正方形。网格是矩形,宽度和高度不超过 100。
需要实现一个算法确定岛的周长。岛的周长指的是 1 与 0 相邻的边的个数乘以边长。
例如对于如下网格单元构成的岛屿,周长为 16。
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
输入描述
第一行输入两个数字 N,M(1<N,M<1000),表示网格地图的高和宽。
接下来 NN 行,每行 MM 个元素,为网格地图。
输出描述
输出一个数字,为岛屿的周长。
输入输出样例
示例
输入
4 4
0 1 0 0
1 1 1 0
0 1 0 0
1 1 0 0
输出
16
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
通过观察,数字1的周围只要有一个0,则周长会增大1,因此我们在初始的数组外面补一圈0,将数组初始定义为102*102的全0数组,从a[1][1]开始递增输入所给的数据,这样可以避免首尾行特殊的情况,对于每一个1而言,都进行一次判定,上下左右四个反向只要出现0,t就会递增1,并再结算之后加到S上,t要在每次开始的时候清0,最后输出即可