图(Graph)-图的遍历(DFS&BFS)

1.图的深度优先遍历-DFS(Depth First Search)

1.1 深度优先遍历

深度优先遍历,有时候也成为了深度优先搜索,简称DFS,其实,就是像一棵树的前序遍历。
它从图中弄的摸个节点v触发,访问此顶点,然后从v的未被访问的邻接点触发深度优先遍历
图,直到图中所有和v有路径相同的顶点的都被访问到。若图中尚有顶点未被访问,则另选图
中的一个为被访问的顶点做起始点,重复上述过程,直至图中的所有顶点都被访问到为止。

深度优先搜索是通过栈来实现的。

为了实现深度优先搜索,首先选择一个起始顶点并且需要遵守三个规则:
1.如果可能,访问一个邻接的未访问点,标记它,并把它放入到栈中;
2.当不能执行规则1时,就从栈中弹出一个顶点;
3.如果不能执行规则1和规则2,就完成了整个搜索过程。

2.图的广度优先遍历-BFS(Breadth First Search)

2.1 广度优先遍历

广度优先遍历,又称广度优先搜索,简称BFS。在深度优先搜索中,算法表现好像要尽快的远离起点似的。想法,在广度优先搜索中,算法好像要尽可能地靠近起始点。它首先访问起始顶点的所有邻接点,然后在访问较远的区域,它是用队列来实现的。

实现广度优先搜索,也要遵守三个规则:
(1)访问下一个未来访问的邻接点,这个顶点必须是当前顶点的邻接点,标记它,并把它插入
   到队列中;
(2)入股因为已经没有未访问顶点二不能执行规则1时,那么从队列头取一个顶点,并使其成为
   当前顶点;
(3)如果因为队列为空而不能执行规则2,则搜索结束。

猜你喜欢

转载自blog.csdn.net/Edidaughter/article/details/121068497