宽度优先搜索
又有的时候,我们还会碰到这样一些貌似可以用深搜解决,但又有点茫然打不出深搜程序的题:奇怪的电梯、倒牛奶、面积……这些问题,问的都是最怎么怎么样,但也是从一个起点出发往下走。怎么办?这时候我们就要用到一个新的算法。虽然也叫搜索,但它并没有回溯这个操作。它和深度优先搜索一样,有个昵称:广度优先搜索。当然了,它肯定有个正式名称,那就是
(图片来源网络,侵删)
宽度优先搜索(BFS,简称宽搜)
那么,宽度优先搜索又是个什么东西?它和深度优先搜索又有什么区别?我会在这里一一介绍。
一、宽度优先搜索的思想
宽度优先搜索是从一个节点(位置)出发,拓展出所有它可以拓展出来的节点(位置)。接着,指针移到下一个位置,对这个位置继续进行拓展,然后指针再移到下一个位置,再继续拓展……直到找到答案为止。
它和深度优先搜索不同,深度优先搜索是“往死里走”,宽度优先搜索则是不紧不慢地,先拓展完一个再拓展另一个。
二、宽度优先搜索的基本用途
宽度优先搜索一般在“最值问题”中会大显身手,当然在总的方案问题中也占有一席之地(当深搜会爆栈时)。在图论问题中,它也经常用来遍历一个图;树的遍历,有时也会用来完成。
三、宽度优先搜索的写法
与深搜不同,宽搜一般用while循环来实现。宽度优先搜索其实相当于创建一个队列(或者说填充数组),要用两个指针i,j。i表示当前正在拓展的节点(位置),j表示这个数组的终点。
以下是宽度优先搜索的框架:
初始化data、i=0、j=1和标记(凡是搜索都离不开标记这个玩意儿,一定要记住!不然Runtime Error或者Time Limit Exceeded别怪我没说过!)
while(i
i++;
for(int s=1;s
j++;
拓展新节点;记录步数;标记;
if(新节点==目标节点) printf步数,退出;(如果是求总的方案,则ans++)
}
}
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
