BFS系列(一)

来源:互联网 发布:winrar64解压软件下载 编辑:程序博客网 时间:2024/06/05 07:26

起源

最开始接触BFS算法是从图算法开始的,但是图本身不是一个适合初学者的数据结构,所以这个系列的文章为BFS的学习者引路。

例子

Input: A graph Graph and a starting vertex root of Graph

Output: Goal state. The parent links trace the shortest path back to
root Breadth-First-Search(Graph, root):

create empty set Screate empty queue Q      add root to SQ.enqueue(root)                      while Q is not empty:    current = Q.dequeue()    if current is the goal:        return current    for each node n that is adjacent to current:        if n is not in S:            add n to S            n.parent = current            Q.enqueue(n)

上面的例子是Wiki上给出的用BFS求简单图最短路径的伪代码,虽然有缺陷,但是可以研究和注意的地方有很多。

BFS基本思想

先分析这个最短路径算法,本来BFS的提出就是为了解决这个问题。输入为无权无向图,给出的是起始位置。
首先看通用的BFS都需要什么,需要一个队列(FIFO数据结构),一个哈希表(判断是否已访问)一个root..(起始结点)。首先把root加入哈希表,代表已经访问过,然后把root加入队列。。。while循环判断队列是否空,拿出队列中的一个元素,如果当前元素就是所要求的目标,访问,程序结束。否则对于每个与current相邻的元素,如果adj不在哈希表中(没有被访问过),那么将其加入哈希表(标记已经访问过),再将其加入队列。

补充说明:parent域是用来跟踪一直从找的终点到首结点的辅助域。。。这里不是很通用。

BFS千变万化

这里的图可以是二叉树,那么就不需要哈希表S了。另外这里的哈希表也很有讲究,因为有时候根据给出图的自身条件(比如二维矩阵)就不用再建哈希表了,天然的boolean数组。。。
而且这个相邻元素也很有讲究,对于二叉树就是其左右子树,对于棋盘,就是上/下/左/右的点,或者更多方向。
最后说这个层级遍历,层级遍历不是必须的,但有时候需要,比如求最短路径的长度或者将二叉树按层级遍历输出

面试常考BFS

由于给出一个图不太方便,所以面试基本上会给出一个棋盘背景,这个时候就特别要注意边界的问题以及边界函数的写法。

练习

光说不练,没有体会和提高,这里选了一些BFS题带读者感受BFS..
https://www.lintcode.com/zh-cn/problem/binary-tree-level-order-traversal/#
https://www.lintcode.com/zh-cn/problem/number-of-islands/
https://www.lintcode.com/zh-cn/problem/surrounded-regions/
https://www.lintcode.com/zh-cn/problem/knight-shortest-path/

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 地板上有真实漆怎么办 吸了泡泡球的气怎么办 办公室上班坐着太累怎么办 金雀盆景生虫怎么办 租的房子墙脏怎么办 租住个厕所对着卧室怎么办 农村的房子没有房产证怎么办 墙面漆颜色深了怎么办 浴室门对卧室门怎么办 卧室40多个平方太大怎么办 卧室门洞太窄了怎么办 刷漆的墙面脏了怎么办 卧室颜色刷重了怎么办 感觉房子买小了怎么办 淋浴房一边是窗怎么办 1岁宝宝让狗咬了怎么办 2岁宝宝让狗咬了怎么办 带4个小孩只买两张儿童票怎么办 墙面补漆颜色有色差怎么办 墙壁刷的乳胶漆颜色不满意怎么办 门被水泡的鼓了怎么办 定制衣柜做大了怎么办 找平的地面高了怎么办 卫生间推拉门锁坏了怎么办 阳台推拉门框安装斜了怎么办? 电子门钥匙坏了怎么办 门的保险锁坏了怎么办 小区楼宇门坏了怎么办 门的锁坏了怎么办 汽车门把锁坏了怎么办 厨柜门上的板板掉了怎么办 衣柜门滑轮坏了怎么办 厨房推拉门推动时有声音是怎么办? 塑料推拉门声音大怎么办不好推 推拉门锁扣坏了怎么办 衣柜移门拉不动怎么办?如何保养 擦黑色桌面有层白灰怎么办 宝宝睡觉不盖被子怎么办 孩子盖被子就哭怎么办 一盖被子就发烧怎么办 两岁宝宝认被子盖怎么办