携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
图的遍历方式及实现
从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历
在图结构中,存在着两种遍历搜索的方式,分别是 广度优先搜索 和 深度优先搜索
广度优先搜索
广度优先搜索是一种用于图的查找算法,用于解决最短路径问题,可以帮助回答两类问题:
从节点A出发,有前往节点B的路吗?
从节点A出发,前往节点B的哪条路径最短?
1、查找有无路径?
- 依次检查一度关系,查看能否相连
- 如果能相连,则成功结束
- 不能相连,将每一个一度关系的邻居加入查找名单
- 循环,直到寻找到路径或者循环完毕
2、查找最短路径
- 最短路径肯定会优先出现在一度关系,然后是二度关系,依次类推
- 因此只有按顺序查找,才能实现这个目的,可实现这种目的的数据结构是队列(queue)
广度优先遍历(BFS):类似于图的层次遍历,它的基本思想是:首先访问起始顶点v,然后选取v的所有邻接点进行访问,再依次对v的邻接点相邻接的所有点进行访问,以此类推,直到所有顶点都被访问过为止
BFS和树的层次遍历一样,采取队列实现,这里添加一个标记数组,用来标记遍历过的顶点
执行步骤:
- 1、先把 A 压入队列,然后做出队操作,A 出队
- 2、把 A 直接相关的顶点 ,B、F 做入队操作
- 3、B 做出队操作,B 相关的点 C、I、G 做入队操作
- 4、F 做出队操作,F 相关的点 E 做入队操作
- 5、C 做出队操作,C 相关的点 D 做入队操作
- 6、I 做出队操作(I 相关的点B、C、D 都已经做过入队操作了,不能重复入队)
- 7、G 做出队操作,G 相关的点 H 做入队操作
- 8、E 做出队操作...
- 9、D 做出队操作...
- 10、H 做出队操作,没有元素了
代码实现: