博客
关于我
DFS深度优先搜索遍历
阅读量:237 次
发布时间:2019-03-01

本文共 1166 字,大约阅读时间需要 3 分钟。

深度优先搜索(DFS,Depth First Search)是一种常见的图和树遍历算法,早在19世纪就被用于解决迷宫问题。DFS通过使用栈来实现,而与广度优先搜索(BFS)相比,主要区别在于换用了栈数据结构。栈具有后进先出的特性(Last In First Out,LIFO),这使得DFS在探索图时,会优先深入一条路径再回溯。

DFS的基本实现步骤如下:

  • 将起始点放入栈中,并标记为已访问。
  • 重复以下步骤,直到栈为空:
    • 从栈顶取出当前节点。
    • 访问该节点。
    • 找到该节点的所有未访问的邻接点,将这些点按预定规则(如按编号升序)排列后,一起压入栈中。
    • 如果当前节点没有未访问的邻接点,则将其从栈中弹出。
  • 以一棵示例树为例(假设左分枝优先):

  • 将根节点1放入栈中。
  • 取出1,标记为已访问。
    • 1的邻接点为2和9,按规则选择2。
    • 将2放入栈。
  • 取出2,标记为已访问。
    • 2的邻接点为1、3、5。1已访问,排除。选择3。
    • 将3放入栈。
  • 取出3,标记为已访问。
    • 3的邻接点为2和4。2已访问,排除。选择4。
    • 将4放入栈。
  • 取出4,标记为已访问。
    • 4的邻接点为3、5、6。3已访问,排除。选择5。
    • 将5放入栈。
  • 取出5,标记为已访问。
    • 5的邻接点为2、4,均已访问。无未访问节点,弹出5。
  • 取出4,标记为已访问。
    • 4的邻接点为6。
    • 将6放入栈。
  • 取出6,标记为已访问。
    • 6的邻接点为4、7、8。4已访问,排除。选择7。
    • 将7放入栈。
  • 取出7,标记为已访问。
    • 7的邻接点为6,已访问。无未访问节点,弹出7。
  • 取出6,标记为已访问。
    • 6的邻接点为8。
    • 将8放入栈。
  • 取出8,标记为已访问。
    • 8的邻接点为1、6、9。1、6已访问,排除。选择9。
    • 将9放入栈。
  • 取出9,标记为已访问。
    • 9的邻接点无未访问节点,弹出9。
  • 栈中剩余节点依次为8、6、4、3、2、1,即将被弹出,DFS遍历完成。
  • DFS的递归实现方式如下:

    int visited[maxSize];void DFS(AGraph *G, int V) {    visited[V] = 1; // 标记为已访问    printf("%d", V); // 输出访问节点    ArcNode *p = G->adjlist[V].firstarc;    while (p != null) {        if (visited[p->adjvex] == 0) { // 如果邻接点未访问            DFS(G, p->adjvex); // 递归访问        }        p = p->nextarc; // 指向下一条边    }}

    通过这个过程,可以清晰地看到DFS如何深入探索每一条路径,再回溯处理。这种方法确保了在有限的资源下,能够高效地遍历图结构。

    转载地址:http://krzt.baihongyu.com/

    你可能感兴趣的文章
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>
    NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
    查看>>
    nodejs支持ssi实现include shtml页面
    查看>>
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>
    nodejs服务端实现post请求
    查看>>
    nodejs框架,原理,组件,核心,跟npm和vue的关系
    查看>>
    Nodejs概览: 思维导图、核心技术、应用场景
    查看>>
    nodejs模块——fs模块
    查看>>
    Nodejs模块、自定义模块、CommonJs的概念和使用
    查看>>
    nodejs生成多层目录和生成文件的通用方法
    查看>>
    nodejs端口被占用原因及解决方案
    查看>>
    Nodejs简介以及Windows上安装Nodejs
    查看>>
    nodejs系列之express
    查看>>
    nodejs系列之Koa2
    查看>>
    Nodejs连接mysql
    查看>>
    nodejs连接mysql
    查看>>
    NodeJs连接Oracle数据库
    查看>>
    nodejs配置express服务器,运行自动打开浏览器
    查看>>