彻底搞懂深度优先搜索算法(DFS)— JAVA版本

本文详细介绍了深度优先搜索(DFS)算法,包括其基本思想、无向图的DFS访问示例、算法分析,并提供了完整的JAVA代码实现。DFS算法适用于判断从初始状态到目标状态是否有解的问题,例如图的遍历。文章还探讨了在JAVA中使用LinkedList作为邻接表数据结构的原因。
摘要由CSDN通过智能技术生成

彻底搞懂DFS算法法(JAVA版本)

深度优先搜索算法(DFS,Depth-First-Search),是搜索算法的一种。

基本思想:沿着树的深度来遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。


深度优先搜索算法也是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最长路径、最短路径问题等等。
因发明“深度优先搜索算法”,霍普克洛夫特与陶尔扬共同获得计算机领域的最高奖:图灵奖.

DFS适合此类题目:给定初始状态跟目标状态,要求判断从初始状态到目标状态是否有解。

例如:利用DFS算法进行无向图的遍历问题
假设初始状态是图中所有顶点都未被访问,则深度优先搜索方法的步骤是:
1)选取图中某一顶点Vi为出发点,访问并标记该顶点;
2)以Vi为当前顶点,依次搜索Vi的每个邻接点Vj,若Vj未被访问过,则访问和标记邻接点Vj,若Vj已被访问过,则搜索Vi的下一个邻接点;
3)以Vj为当前顶点,重复步骤2),直到图中和Vi有路径

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值