蓝桥云课寻找岛屿的周长C语言

寻找岛屿的周长

题目描述

实现一个算法找到岛屿的周长。介绍如下:

给定一个包含 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]]

62e27f45accf4985a71a76fce394446f.png

输入描述

第一行输入两个数字 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

4c43944fe7af4182a57ec6e38039214d.png

输出

16

9e188d7ac4a44b36baea17c7dca6d84a.png

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

e7f89344f7d84696a92595cd50953a11.jpg

 c2f39cdf96b54543b131fb15a78da248.jpg

通过观察,数字1的周围只要有一个0,则周长会增大1,因此我们在初始的数组外面补一圈0,将数组初始定义为102*102的全0数组,从a[1][1]开始递增输入所给的数据,这样可以避免首尾行特殊的情况,对于每一个1而言,都进行一次判定,上下左右四个反向只要出现0,t就会递增1,并再结算之后加到S上,t要在每次开始的时候清0,最后输出即可

  • 15
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值