图 之遍历----深度优先遍历0.o

何为深度优先遍历0.o呢?DFS是图论中的经典算法。其利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。

基本思想:(一条路走到底然后再一个脚步一个脚步返回~)

  1. 首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边一直走下去,走到未访问过的顶点;
  2. 当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直到所有的顶点都被访问过。


以这个图为例:以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)


(看得懂觉得不错的帮忙点个赞呀~)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值