深度优先搜索

✍ dations ◷ 2025-06-30 02:50:35 #深度优先搜索

深度优先搜索算法(英语: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,下面的程序能帮助理解:

相关

  • 计算机断层扫描计算机断层成像(Computed Tomography,简称CT),是一种影像诊断学的检查。这一技术曾被称为计算机轴向断层成像(Computed Axial Tomography)。X射线计算机断层成像(X-Ray Computed To
  • FBReaderFBReader是一款免费、开源的跨平台电子书阅读器,以GNU通用公共许可证发布。适用于 Linux、Microsoft Windows、Mac OS、Android 等多种操作系统。支持的格式包括 EPUB,PDF,fb2,H
  • 肯特州立大学肯特州立大学(Kent State University, Kent State, KSU)是美国一所公立大学,位于俄亥俄州东北部的肯特,成立于1910年。成立之初为肯特师范学院,之后于1930年代成为公立大学。目前
  • 饭田里穗饭田里穗(1991年10月26日-),日本的歌手、声优、艺人,属于放映新社,昵称“Rippi”(りっぴー)。身高157公分。μ's的成员之一,另外也在许多连续剧、广告与电影中演出。官方粉丝俱乐部为
  • 吴荣曾吴荣曾(1928年9月29日-) ,中国历史学家,先秦史专家和考古学家。中国古代史分期魏晋封建论的主要代表人物之一,北京大学历史系教授。1928年生于苏州,祖籍江苏省常州。1950年考入北京
  • 玛格丽塔·嘉丝帕瑞安玛格丽塔·嘉丝帕瑞安(英语:Margarita Gasparyan,1994年9月1日-)是俄罗斯职业网球女运动员,2010年转职业。她的WTA生涯最高单打排名为第41(2016年3月21日)。
  • 周自邗周自邗(?-1616年),山东济南府滨州军籍。万历四十四年(1616年)丙辰科进士,未任官,卒。
  • 战犬瑞克斯《梅根·利维》(英语:)是一部2017年美国传记剧情片,由盖芙列拉·考柏史维特执导,帕梅拉·格雷、安妮·玛莫罗(英语:Annie Mumolo)和提姆·洛夫塞特共同撰写剧本。其剧情描述年轻的美
  • 八角街道 (烟台市)八角街道,是中华人民共和国山东省烟台市福山区下辖的一个乡镇级行政单位。八角街道下辖以下地区:八角社区、八角口社区、青上社区、峰台社区、小赵家社区、八角泊子社区、于家社区、侯家社区、汤家社区、汪家社区、叶家社区、官庄社区、下刘家渔业社区、下刘家农业社区、陡崖社区、上刘家社区、芹子口社区、辛店社区、郑家庄社区、花岩社区、百堡社区、石屋营社区和黄庄社区。2010年中国第六次人口普查时,八角街道共有人口24001人。共有家庭6159户,平均每户2.65人。14岁以下的少年儿童共1854人,占总人口7.724%;1
  • 赫茨尔山广场坐标:.mw-parser-output .geo-default,.mw-parser-output .geo-dms,.mw-parser-output .geo-dec{display:inline}.mw-parser-output .geo-nondefault,.mw-parser-output .geo-multi-punct{display:none}.mw-parser-output .longitude,.mw-parser-output .latitude{white-space:n