深度优先搜索

✍ dations ◷ 2025-06-08 10:34:45 #深度优先搜索

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

深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的拓扑排序表(p. 612),利用拓扑排序表可以方便的解决很多相关的图论问题,如无权最长路径问题等等。

因发明“深度优先搜索算法”,约翰·霍普克洛夫特与罗伯特·塔扬在1986年共同获得计算机领域的最高奖:图灵奖。

定义一个结构体来表达一个二叉树的节点的结构:

struct Node {    int self;     // 数据    Node *left;   // 左孩子    Node *right;  // 右孩子};

那么我们在搜索一个树的时候,从一个节点开始,能首先获取的是它的两个子节点。例如:

                 A           B           C      D   E          F   G                                      

A是第一个访问的,然后顺序是B和D、然后是E。然后再是C、F、G。那么我们怎么来保证这个顺序呢?

这里就应该用堆栈的结构,因为堆栈是一个后进先出(LIFO)的顺序。通过使用C++的STL,下面的程序能帮助理解:

相关

  • SFsub2/sub二氟化硫是一种硫的卤化物,化学式为SF2。它可由二氯化硫与氟化钾或氟化汞在低压在反应制得:二氟化硫分子中键角为98°,键长为159pm。这种化合物十分不稳定,会分解为FSSF3。它的
  • 萨帕尔穆拉特·阿塔耶维奇·尼亚佐夫萨帕尔穆拉特·阿塔耶维奇·尼亚佐夫(土库曼语:Saparmyrat Ataýewiç Nyýazow;俄语:Сапармура́т Ата́евич Ния́зов;1940年2月19日-2006年12月21日)是
  • 退伍军人美国退伍军人事务部长是美国退伍军人事务部的主管,它在美国内阁中排名第17位。当美国退伍军人事务部长空缺时,由美国退伍军人事务部副部长接替,直到总统任命新部长为止,现任部长
  • 阿姆哈拉语阿姆哈拉语(አማርኛ,Amarəñña)是在埃塞俄比亚使用的闪语的一种,与阿拉伯语、希伯来语同属闪语族,是闪语族中使用人数第二多的语言(仅次于阿拉伯语),是埃塞俄比亚的官方语言。阿
  • 医疗卫生科学医疗卫生科学(又称:医疗科学、健康科学、保健科学)与应用科学息息相关,旨在运用理工及技术之知识,解决与生物健康有关的问题。除了传统的医学外,此类学科还包括护理、公共卫生等学
  • 2010年荷兰羽毛球大奖赛2010年荷兰羽毛球大奖赛为第62届荷兰羽毛球公开赛,是2010年世界羽联大奖赛的其中一站。本届赛事于2010年10月19日至10月24日在荷兰阿尔梅勒内的Topsportcentrum Almere举行,并
  • 2015年3月逝世人物列表2015年3月逝世人物列表,是用于汇总2015年3月期间逝世人物的列表。
  • 十五少年漂流记十五少年漂流记(英语:,法语:)是法国小说家朱尔·凡尔纳的小说,1888年出版,多次被改编成动画、电影、电视剧。内容描述15名少年或儿童在无人岛生活了两年的冒险故事。1860年3月9日,一
  • 团鬼六团鬼六(日语:だん おにろく、1931年4月16日(户籍上是9月1日)- 2011年5月6日),本名为黑岩幸彦,是日本的小说家、编剧、电影制片、演员。从关西学院大学法学部毕业后曾做过剧作家、酒
  • GTKGTK(原名GTK+)最初是GIMP的专用开发库(GIMP Toolkit),后来发展为Unix-like系统下开发图形界面的应用程序的主流开发工具之一。GTK是自由软件,并且是GNU计划的一部分。自2019年2月6