搜索の重要性(BFS篇-概念)

一、搜索究竟是个啥?

在没学搜索之前,我们大部分人都是这样的:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDnqbrmsJTnuqLosYbljIU,size_20,color_FFFFFF,t_70,g_se,x_16

这样的:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDnqbrmsJTnuqLosYbljIU,size_20,color_FFFFFF,t_70,g_se,x_16 

或者是,这样的:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDnqbrmsJTnuqLosYbljIU,size_10,color_FFFFFF,t_70,g_se,x_16 

然而学了搜索之后,立马就感觉自己行了!

理由就是:

搜索这个东西理解起来并不难,但是代码量十分の大,十分容易令人产生成就感(线段树:???)。 

如果你是一个刚学完排序的萌新,那么下面你大概率就会遇见这俩玩意儿:深搜、宽搜(dfs、bfs)。

2、宽搜(bfs,又名广搜)

宽搜顾名思义,就是追求一个“宽”,也可以说是拓展。

如果讲的难一点,宽搜就是拓展出与自己有关联的其他情况。

如果讲的通俗易懂一点,那就讲个故事吧:

红豆包子被困在了一个荒岛上,这个岛上被分割成了若干个小方格,红豆包子想要逃离这个荒岛,于是他便派出了一些红豆去打探情报。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDnqbrmsJTnuqLosYbljIU,size_20,color_FFFFFF,t_70,g_se,x_16

他一开始在荒岛中的蓝色格子, 而他派出了红豆会往上下左右四个方向去打探消息,所以红豆们会到达所有红色格子。

而对于每个红色格子,红豆又会对它进行上下左右四个方向的拓展,于是便到达了所有的绿色格子。

就这样下去,黄色、黑色、紫色……

这样就成功遍历了一遍这个岛屿(岛屿礼貌:你吗?)。

在《红豆包子逃离荒岛》中,与自己有关联的情况指的是,下一步能直接达到的格子。

但是你以为宽搜就这?只能用于矩阵(逃离荒岛)中?

再讲一个故事:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDnqbrmsJTnuqLosYbljIU,size_20,color_FFFFFF,t_70,g_se,x_16

红豆包子是一个十分帅气的人,但是平时脾气不大好,导致产生了很多前任(雾),现在他想向他的前任借钱。如果借不到,前任便也会向他(她)的前任借钱,就这样子无休无止……

而在他的前任中,大部分人也跟他一样,颜值高而脾气差,于是也产生了很多前任……

在上图中,红色表示红豆包子,蓝色、黄色、天蓝色代表了他的3个前任。对于黄色而言,橙色、粉色、紫色代表了她的3个前任。

这次,红豆包子又分别派出了一些红豆去借钱。这些红豆会先到达跟他关系最近的人(蓝色、黄色、天蓝色)借钱,然后会去到距离这些前任关系最近的人中去借钱……

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDnqbrmsJTnuqLosYbljIU,size_20,color_FFFFFF,t_70,g_se,x_16

上图表示了借钱的顺序,由此把所有的前任都遍历了一遍(礼貌前任:你吗?)。

在《红豆包子之前任历险记》中, 与自己有关联的情况指的是,自己的前任。

由此可见,宽搜并不是一种专门用于矩阵的算法。

而是一种搜索的思想。

总结出俩字:拓展。

另外要注意的一点就是:要加一个bool数组,表示有没有被访问过。

如果被访问过了,就不能够再访问了(这不是废话么)。

反之,就将它设置为访问过。

如果不这样做的话……

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDnqbrmsJTnuqLosYbljIU,size_20,color_FFFFFF,t_70,g_se,x_16

红豆们就会不停地在两个格子之间反复横跳,最后一脸懵逼地禀告红豆包子:

大人,程序跑爆掉了!我们被困住了!

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDnqbrmsJTnuqLosYbljIU,size_20,color_FFFFFF,t_70,g_se,x_16

红豆包子会向自己的前任借钱 ,前任没有钱,便会向红豆包子借钱(?),红豆包子也没钱,就会向前任借钱。

然后就这样子,程序跑爆掉了,红豆包子与前任也修成正果了……

所以不要忘记加访问数组哦! 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值