程序设计训练(三)

关于深度优先算法(dfs)和广度优先算法(bfs)的一点东西。

深度优先遍历

深度优先,本质应该是图的遍历,从某个顶点出发,访问图中的每一个顶点,而深度优先就意味着它是优先选择更深层次的顶点,用树来看得的话,那就是最快到达某个叶子结点。
一般步骤:

1)选取图中某一顶点Vi为出发点,访问并标记该顶点;
2)以Vi为当前顶点,依次搜索Vi的每个邻接点Vj,若Vj未被访问过,则访问和标记邻接点Vj,若Vj已被访问过,则搜索Vi的下一个邻接点;
3)以Vj为当前顶点,重复步骤2),直到图中和Vi有路径相通的顶点都被访问为止;
4)若图中尚有顶点未被访问过(非连通的情况下),则可任取图中的一个未被访问的顶点作为出发点,重复上述过程,直至图中所有顶点都被访问。

通俗来讲,深度优先就像是地下寻宝,好东西都在地下深处,我们要一直往下挖,差不多就留个标记,不能往下挖了,我们就往前后左右挖,然后再试着往下挖,都不行的话,我们就往上爬回去一点,再往前后左右挖,直到去过所有能去的地方,回到地面上。

经典例子

我们来看一个图
在这里插入图片描述
我们按照深度优先来排列这个无向图的拓扑序列,其中字母按ABCDEFG顺序存储。从标记顶点A并从它出发,访问A的邻接点C、D、F,在同深度的情况下,按照存储顺序优先选择C并标记;然后继续访问C的邻接点B、D,这里优先选B并标记;在B无邻接点的情况下回退一个节点,接着访问C的另一个邻接点D并标记;一直回退到A,因为D已经被标记,所以选择A的最后一个邻接点F,按照之前的步骤访问,最后得到的序列为:A -> C -> B -> D -> F -> G -> E

实际应用

单词接龙

单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值