cs61b2018sp WEEK10.2 图的遍历

2022.4.3

WEEK10.1 图的遍历

一、内容

1.深度优先搜索(DFS)

我们上节课讲过,我们这里再复习一下。
所谓深度优先,就是先一条路走到底,然后再返回寻找可以继续走到底的路
进行DFS时,一定要注意对已经访问的节点进行标记

2.图的类似树的遍历

我们之前讲树的时候,学了很多的遍历方法,如前序、中序、后序、层序。
而树是一种特殊的图,我们对于图,也应该有这种遍历方法
来一个题目看看吧

以2为顶点进行层序遍历
问哪一个选项不是层序遍历?

答案是B!4的深度比5高,理论上4不会比5优先出现!
注意,同层次的顺序不重要,但不同层次的顺序很重要

如果是这样的图呢?以上哪个选项是以2为顶点的层序遍历?

答案是A!

再来一个,请问此图的从0开始的后序遍历是什么
注意这里有一个邻接链表,想一想这个邻接链表有什么用!

选D!注意邻接链表,首先访问的是1!

3.拓扑排序(Topological Sort)

将一个图以箭头顺序排序。注意这个排序结果不唯一

比如这个图
符合拓扑排序的结果有如图所示

可见,我们都是从入度为0的节点开始进行拓扑排序,然后根据箭头指向一步步排序。
这里老师给我们了一种排序方法:
(1)对一个(任何一个都可以,但注意有多个的情况)入度为0的点开始DFS
(2)完成之后,我们要看是否还有没有访问到的点,若无,结束;若有,“重启”,从这个节点开始DFS
(3)循环2、3步,直到都访问。此时输出数组类似一个DFS的数组(只是多了重启的访问)。
(4)将这个数组翻转(字面意思),就得到了topo排序

我们看一下到底是如何进行的

对一个节点开始DFS
此时一个DFS已经完成,但发现所有节点没有都访问,我们需要重启
从2开始重启(入度为0的节点),进行DFS。直到所有节点都访问。此时有一个输出数组
最后,我们翻转这个数组,于是得到我们需要的topo排序
排序后的简化图形

这个topo排序,用到了DFS,可见,DFS还是很重要的
注意在这一题,我们不能从2开始,因为此时3会在0前面,不符合要求(自己试试)

代码实现

4.广度优先排序(Breadth First Search——BFS)

这个有点类似树的层序遍历,但稍微有些不同

我们考虑使用一个队列(先进先出)来实现
先初始化一个队列,插入一个开始节点,并标记次节点。这里把队列称为fringe(中文意思是边界)
在队列被清空之前,我们会把旧节点v移出队列,继续把新的、未标记的v节点的相邻节点加入队列
下面看一个例子理解一下

如图,我们从0开始
然后检查0是否标记,没标记,则更新标记数组,并加入队列

注意我们发现一个可入队的节点后,我们先更新信息数组,再入队

然后将0移出队列,并将0的邻接节点且没标记的,即1节点,加入队列,并标记
在入队前更新数组
将1移出,并找未标记的相邻节点,即2、4,并入队
更新信息数组
然后2出队(因为2先入队,在4前面),并检查,发现5可以入队
在入队前记得更新数组

同理,之后就不说了
BFS运行时间消耗为 V + E

BFS代码实现
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容