深度优先搜索

✍ dations ◷ 2025-09-14 23:59:39 #深度优先搜索

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

相关

  • 解毒剂解毒剂指可以解除毒性的物质。常见的毒物和对应的解毒剂有:抗高血压药 · 利尿剂 · 血管舒张剂 · β受体阻断剂 · 钙离子通道阻滞剂 · 肾素-血管紧张素系统(ACE
  • 威格斯图威格斯图(英语:Wiggers diagram),用于心脏生理学的标准图,由卡尔J.威格斯(英语:Carl J. Wiggers)博士的名字命名,特色是将心脏生理的各种数据同时绘出,以便比较其中差异。X轴是用来绘
  • 海葵毒素岩沙海葵毒素(英语:Palytoxin,又称沙群海葵毒素,或简称为海葵毒素)含有129个碳原子,64个手性中心。白色粉末,无固定熔点,加热至300℃炭化。是一类从沙群海葵科岩沙海葵中提取的水溶
  • 批判现实主义批判现实主义,为现实主义传统的继承与发展,指十九世纪在欧洲形成的一种文艺思潮和创作方法。
  • 西德马克德国马克( Deutsche Mark 帮助·信息 ,德语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code
  • 詹姆士·史特灵英国皇家海军上将詹姆士·史特灵爵士(1791年1月28日-1865年4月23日)是一位海军官员和殖民地行政长官。他于1828年至1838年间,出任派驻澳大利亚西澳的第1任总督;1854年,在他推动下,
  • 黄名伟黄名伟(Eddie Huang,1964年4月25日-),台湾流行歌手,亦是音乐制作人,出生于台湾台北,他的歌曲包括《恋恋情深》、《黑夜之子》、《大地》等、后专值于音乐创作,及幕后音乐制作人的角色
  • 越戏方越戏方,又名反虎方。商朝、周朝时方国。在今河南省巩义市东南。武王克殷之后,命吕尚追击商将方来。三月初一(丁卯日),归来献俘。三月初五(戊辰日),武王在牧晴祭祀周文王,宣布政令。兵
  • 马尔文·艾维拉马尔文·艾维拉(Marvin Tomás Ávila Sánchez),1985年2月6日生于利文斯顿,危地马拉职业足球运动员,现效力于中国足球超级联赛球会陕西中新队,是中国足球联赛第一位危地马拉籍球
  • 杰米拉杰米拉(阿拉伯语:جميلة‎,罗马化:Djémila,卡拜尔语:Ğamila)位于阿尔及利亚塞提夫省,为一处古罗马时代的遗迹。杰米拉在古罗马时代称为奎库尔,始建于一世纪,在二世纪至三世纪初期蓬勃发展。七世纪阿拉伯人攻占该地后,改名为杰米拉,但未继续使用该城镇,该地逐渐荒废。遗址于1909年至1957年间陆续被挖掘出来。1982年第6届世界遗产委员会通过杰米拉成为世界遗产。世界遗产委员会指称,该遗迹展示了二世纪至六世纪北非古罗马历史上重要的一页,此地克服了地形的限制,建构多样化的罗马式建筑,为世界上最美丽