深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。

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

伪代码(Pseudocode):

Input: A graph G and a vertex v of G

Output: All vertices reachable from v labeled as discovered

A recursive implementation of DFS:

procedure DFS(G, v) is    label v as discovered    for all directed edges from v to w that are in G.adjacentEdges(v) do        if vertex w is not labeled as discovered then            recursively call DFS(G, w)

The order in which the vertices are discovered by this algorithm is called the lexicographic order.

A non-recursive implementation of DFS with worst-case space complexity 。

procedure DFS-iterative(G, v) is    let S be a stack    S.push(v)    while S is not empty do        v = S.pop()        if v is not labeled as discovered then            label v as discovered            for all edges from v to w in G.adjacentEdges(v) do                 S.push(w)

黄哥所写的代码,迭代实现。

递归实现。

请看西瓜视频播放地址。

python 短进程优先算法_黄哥Python:图深度优先算法(dfs)相关推荐

  1. python分治算法_黄哥Python:分治算法(Divide-and-Conquer)

    分治算法(Divide-and-Conquer) 在计算机科学中,分而治之(简称分治法)是基于多分支递归的算法设计范例.分而治之算法的工作原理是将问题递归分解为两个或多个相同或相关类型的子问题,直到这 ...

  2. python 单链表添加节点_黄哥Python:单链表的尾部插入方法

    单链表的尾部插入方法: 1.先判断头结点是不是为None 2.设置一个当前结点node,循环下一个结点,当node.next 为None 时,就到尾部,也就是找到插入点了. 请看下面Python 代码 ...

  3. python解奥数题_黄哥Python:Python代码解决一道小学奥数题

    有如下小学奥数题: 有180盏亮着的电灯,各有一个拉线开关控制着,现按其顺序编号 1,2,3, ..., 180, 然后将编号为4的倍数的电灯线拉一下,再将 编号为5的倍数的灯线拉一下,最后将编号为6 ...

  4. 深度优先搜索 python_黄哥Python:图深度优先算法(dfs)

    深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法.沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在边都己被探寻过,搜索将回溯到发现 ...

  5. 短进程优先算法(C,Java实现)

    复制代码的时候:最好点下图 [cpp] 旁边的那个标签进行复制,不然可能代码编译不了. 在短进程优先算法中需要注意:下一个进程是已经到达且运行时间最短的进程. 输入如下: 4 A   8.00   2 ...

  6. 短进程算法c语言,短进程优先算法C语言实现

    短进程优先算法C语言实现 1.本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单. 短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高.作业的长短是以作业所要求 ...

  7. 计算机操作原理进程调度算法---先来先服务,短进程优先(C语言)

    目录 先来先服务调度算法: 短进程优先调度算法: 两种进程调度算法优缺点 思维导图 程序代码: 先来先服务调度算法: 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可 ...

  8. 操作系统:Java模拟CPU调度算法(非抢占短进程优先、可抢占优先权调度、多级反馈队列调度)

    本人是个普通学生,写下博客用于自我复习.自我总结. 本人编写算法水平不高,仅供各位参考. 首先,先简述一下各个算法的定义.因为我个人在查阅算法相关信息时,发现这些算法在某种程度上来说,可能会存在一些歧 ...

  9. SJF(短进程优先)调度算法C语言实现

    1.实验目的 (1)掌握进程调度过程: (2)掌握进程调度算法的原理. 2.实验内容及要求 采用SPF调度算法,编写并调试一程序,模拟进程调度过程. 已知进程名.到达时间.需要运行时间,编写程序输出进 ...

最新文章

  1. np.max()和np.argmax()
  2. 1.2.3 计算机系统的层次结构
  3. Flink批处理优化器之数据属性
  4. JAVA面试题(part2)--位运算符
  5. eclipse 关闭时progress information弹框_Spring开发环境搭建(Eclipse)
  6. 基于epoll+threadpool的webServer分析与实现
  7. 其它数据类型和Json的转化
  8. wifi两种工作模式
  9. 蔚来Q3营收近百亿、毛利率20.3%,预计明年下半年推出2款新车
  10. Bootstrap 下拉菜单事件
  11. HDOJ--1875--畅通工程再续
  12. python可以写前端吗_哪种ide能同时写java和前端代码?
  13. Android零散技术点
  14. linux加载打印机驱动程序,Linux下安装HP打印机的驱动程序
  15. html样式格式文件的后缀名是( ),什么是HTML格式?什么是CSS格式?
  16. 动态随机存储器的刷新
  17. 爬虫第二讲:Beautiful Soup库
  18. 计算机考证二级(全)
  19. 上海怎样盘活闲置房 区县:多种方式支持
  20. 数据结构学习笔记(基本概念)

热门文章

  1. MySQL安装教程,包含所有平台(图解)
  2. 1.1 基础-取近似值
  3. Acwing第 39 场周赛【完结】
  4. 1.2.3 算法的空间复杂度
  5. 4.1.4 文件的物理结构(上下)
  6. 指向字符串的指针为何不能用来修改此字符串
  7. Spring boot配置Servlet容器
  8. Bootstrap按钮使用
  9. ArrayBlockingQueue队列
  10. Navicat日期时间格式