深度优先搜索

✍ dations ◷ 2025-11-22 10:04:51 #深度优先搜索

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

相关

  • 罗伯特·波义耳罗伯特·波义耳(英语:Robert Boyle,1627年1月25日-1691年12月30日),又译波意耳,爱尔兰自然哲学家,炼金术师,在化学和物理学研究上都有杰出贡献。虽然他的化学研究仍然带有炼金术色彩,
  • ε逆转录病毒属ε反转录病毒属是反转录病毒科下的一个属,此属的病毒主要会感染鱼类,例如大眼梭鲈皮肤肉瘤病毒(Walleye dermal sarcoma virus)和大眼梭鲈鱼表皮过度增生病毒(Walleye epidermal
  • 请融化我吧2019年9月28日 (2019-09-28)-2019年11月17日 (2019-11-17)《请融化我吧》(韩语:날 녹여주오),为韩国tvN于2019年9月28日起播出的周末连续剧,由《秘密花园》、《绅士的品格》的申
  • 高安市高安市是中国江西省宜春市下辖的一个县级市。地处江西省中部偏西北,毗邻南昌市。汉高祖六年(公元前201年)置建成县,为高安建县之始。西汉元始四年(公元4年)改称多聚县。东汉建武元
  • BlackBerry OSBlackBerry OS,是由Research In Motion(现为BlackBerry)为其智能手机产品BlackBerry开发的专用操作系统。这一操作系统具有多任务处理能力,并支持特定的输入设备,如滚轮、轨迹球
  • 太田静子太田静子(日语:おおた しずこ,1913年8月18日 - 1982年11月24日),是日本滋贺县出身的歌人、作家。太宰治的情人之一。因为太宰治小说《斜阳》提供素材而被广为所知。 同为作家的太
  • 阶段式服务器模型SEDA(staged event-driven architecture),中文译为阶段事件驱动架构,也称为阶段式服务器模型。这是一类软件架构模型,它将复杂的、事件驱动的应用分解为一系列通过队列连接的阶段
  • 北杜尔加普尔北杜尔加普尔(Uttar Durgapur),是印度西孟加拉邦South Twentyfour Parganas县的一个城镇。总人口5062(2001年)。该地2001年总人口5062人,其中男性2649人,女性2413人;0—6岁人口575人
  • 施望千施望千是唐代六诏之一的施浪诏王,在位年期不明。他是上任王施望欠之弟,望欠被南诏击败后,望千逃到吐蕃,被吐蕃立为诏(王),在剑川建立根据地,有众数万人,死后由儿子千旁罗颠继位。
  • 黄德宽黄德宽(1954年-),男,汉族,古文字学家。现任中国文字学会会长,国家社科基金语言学科召集人,教育部社会科学委员会语言文学学部委员,中文学科教学指导委员会副主任委员。清华大学人文学