字节跳动2019夏令营笔试编程题第二题 寻找二维数组中相邻一的块数

文章以一个4*5的数组为例,探讨如何用编程实现相关计算。指出可使用DFS算法,但需稍作改编。介绍了DFS从八个方向深搜的思路,走过的点要标记,每次深搜结束开启遍历下一个元素时计数器加1。还提到可用栈实现,类似迷宫问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到这篇文章的标题是不是有点懵呢?

别着急,等我慢慢给你说!

举个例子吧

一个  4*5的数组∈{0,1}

0 1 0 1 0

1 1 0 1 1

1 0 0 1 1

0 1 0 0 0

上下左右斜对角都算相邻   所以答案显而易见  2

那么我们怎样用编程来实现呢?    聪明的读者很快就反应过来的   这这这 不就是DFS么?

没错  但是还需要一点小小的改编

笔试的时候由于平时训练的不够,导致会的题目没写上,所以考完试恶补了一下DFS

在这就大概讲讲思路,因为算法我也没写

这个题用DFS要分方向,我们把八个方向(上,下,左,右,斜上。。。)分别命名为0-7

所以DFS要从这八个方向来深搜,也就是先从最开始向上搜,直到某一个点的上方向没有1了,再从1方向开始搜索,

这样如果某一个点的八个方向都没有1了,因为DFS就是递归,他会自动回到前一个顶点,继续向下一个方向DFS,每走过一个地方都要标记已经走过!并且每次深搜结束将要开启遍历下一个数组元素的时候就要将你的计数器+1,最后遍历完整个数组之后,cout<<count;就行了!!!!!

当然也可以用栈来实现,跟讲到栈那里的迷宫问题类似,可以考虑用c++的STL  <stack>   好用的一批!

好吧  最近实在是没时间,等有空了把这个代码的坑填上!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值