何为深度优先遍历0.o呢?DFS是图论中的经典算法。其利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。
基本思想:(一条路走到底然后再一个脚步一个脚步返回~)
- 首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边一直走下去,走到未访问过的顶点;
- 当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直到所有的顶点都被访问过。
以这个图为例:以a顶点作为起始点,则其深度遍历为:a,c,h,k,f,e,d
简单说明一下:首先从a开始,一条路走到底a,c,h,k,f
走到f时发现fd下一个节点h或者a都被访问过了,所以f返回上一个节点,即k
k的下一个节点e还没被访问,所以访问他,以此类推则可以得到如下:a,c,h,k,f,e,d
了解了DFS的遍历过程,那如何用程序来实现这个过程呢?
下面将给大家介绍:
首先,先去准备一个堆栈,一个Set(是的,还是用来注册用的,BFS遍历的时候也是不能重复的)
下面给上流程图:
1.首先,先把node节点放进去set和stack堆栈中(有没有发现一个很有趣的事情,set和stack总是同时add,同时,也打印出来)
2. 遍历栈顶的next节点,如果set中没包含这个节点,就把这个节点和前一个节点一起添加到stack中去,
同时把该节点也添加到set中,同时打印,最后break。当set中已经包含了该节点的时候,就不执行下面了。
(大家对照着程序一起看,相信是可以看懂滴,加油0。0)
(看得懂觉得不错的帮忙点个赞呀~)