7.4.1无向图的连通分量和生成树

合集下载

2020年清华-伯克利深圳学院962数学-数据方向基础综合考试大纲——盛世清北

2020年清华-伯克利深圳学院962数学-数据方向基础综合考试大纲——盛世清北

2020年清华-伯克利深圳学院962数学-数据方向基础综合考试大纲——盛世清北本文由盛世清北查阅整理,专注清华大学考研信息,为备考清华大学考研学子服务。

以下为2020年清华大学深圳国际研究生院962 《数学-数据方向基础综合》考研考试大纲:962 《数学-数据方向基础综合》考试内容:1.1什么是数据结构1.2基本概念和术语1.3抽象数据类型的表示与实现1.4算法和算法分析1.4.1算法1.4.2算法设计的要求1.4.3算法效率的度量1.4.4算法的存储空间需求2 线性表2.1线性表的类型定义2.2线性表的顺序表示和实现2.3线性表的链式表示和实现2.3.1线性链表2.3.2循环链表2.3.3双向链表2.4一元多项式的表示及相加3栈和队列3.1栈3.1.1抽象数据类型栈的定义3.1.2栈的表示和实现3.2栈的应用举例3.2.1数制转换3.2.2括号匹配的检验3.2.3行编辑程序3.2.4迷宫求解3.2.5表达式求值3.3栈与递归的实现3.4队列3.4.1抽象数据类型队列的定义3.4.2链队列——队列的链式表示和实现3.4.3循环队列——队列的顺序表示和实现3.5离散事件模拟4 串4.1串类型的定义4.2串的表示和实现4.2.1定长顺序存储表示4.2.2堆分配存储表示4.2.3串的块链存储表示4.3串的模式匹配算法4.3.1求子串位置的定位函数Index(S,T,pos)4.3.2模式匹配的一种改进算法4.4串操作应用举例4.4.1文本编辑4.4.2建立词索引表5 数组和广义表5.1数组的定义5.2数组的顺序表示和实现5.3矩阵的压缩存储5.3.1特殊矩阵5.3.2稀疏矩阵5.4广义表的定义5.5广义表的存储结构5.6m元多项式的表示5.7广义表的递归算法5.7.1求广义表的深度5.7.2复制广义表5.7.3建立广义表的存储结构6 树和二叉树6.1树的定义和基本术语6.2二叉树6.2.1二叉树的定义6.2.2二叉树的性质6.2.3二叉树的存储结构6.3遍历二叉树和线索二叉树6.3.1遍历二叉树6.3.2线索二叉树6.4树和森林6.4.1树的存储结构6.4.2森林与二叉树的转换6.4.3树和森林的遍历6.5树与等价问题6.6赫夫曼树及其应用6.6.1最优二叉树(赫夫曼树)6.6.2赫夫曼编码6.7回溯法与树的遍历6.8树的计数7 图7.1图的定义和术语7.2图的存储结构7.2.1数组表示法7.2.2邻接表7.2.3十字链表7.2.4邻接多重表7.3图的遍历7.3.1深度优先搜索7.3.2广度优先搜索7.4图的连通性问题7.4.1无向图的连通分量和生成树7.4.2有向图的强连通分量7.4.3最小生成树7.4.4关节点和重连通分量7.5有向无环图及其应用7.5.1拓扑排序7.5.2关键路径7.6最短路径7.6.1从某个源点到其余各顶点的最短路径7.6.2每一对顶点之间的最短路径8 动态存储管理8.1概述8.2可利用空间表及分配方法8.3边界标识法8.3.1可利用空间表的结构8.3.2分配算法8.3.3回收算法8.4伙伴系统8.4.1可利用空间表的结构8.4.2分配算法8.4.3回收算法8.5无用单元收集8.6存储紧缩9 查找9.1静态查找表9.1.1顺序表的查找9.1.2有序表的查找9.1.3静态树表的查找9.1.4索引顺序表的查找9.2动态查找表9.2.1二叉排序树和平衡二叉树9.2.2B树和B+树9.2.3键树9.3哈希表9.3.1什么是哈希表9.3.2哈希函数的构造方法9.3.3处理冲突的方法9.3.4哈希表的查找及其分析10 内部排序10.1概述10.2插入排序10.2.1直接插入排序10.2.2其他插入排序10.2.3希尔排序10.3快速排序10.4选择排序10.4.1简单选择排序10.4.2树形选择排序10.4.3堆排序10.5归并排序10.6基数排序10.6.1多关键字的排序10.6.2链式基数排序10.7各种内部排序方法的比较讨论11 外部排序11.1外存信息的存取11.2外部排序的方法11.3多路平衡归并的实现11.4置换一选择排序11.5最佳归并树12 文件12.1有关文件的基本概念12.2顺序文件12.3索引文件12.4ISAM文件和VSAM文件12.4.1ISAM文件12.4.2VSAM文件12.5直接存取文件(散列文件)12.6多关键字文件12.6.1多重表文件12.6.2倒排文件备考清华,需要完整的资料,需要坚定的信念,更需要完善的复习策略,把书本从薄读到厚,再从厚读到薄,最后通过目录,就能就能把所有知识脉络延展,相互关联起来,检查是否有知识盲区,这中间是一个艰难的过程,需要有足够的耐力和毅力,一路有盛世清北陪伴你,你的备考不会孤单!。

7.4 图的连通性问题

7.4 图的连通性问题
L: u v a c a a c c length 0 5 0 5 6 4
5
6 e
5
c 4 6
d 2 f
1 2 3 4 5 6
a b c d e f
选择距离当前生成树最近的顶 点f。 加入到生成树中并更新。
6
a 1
5
b 3
L: u v a c a a c c length 0 5 0 5 6 0
5
7.4 图的连通性问题
7.4.1 无向图的连通分量和生成树
•连通:顶点v至v’之间有路径存在 •连通图:无向图图 G 的任意两点之间都是连通的,则称 G 是 连通图。 •连通分量:无向图的极大连通子图
无向图G
A B
无向图G的三个连通分量
A B F G
E
H K
F
I
G
J L H
E
I
J L
M
C D C
M
D K
6 e
5
c 4 6
d 2 f
1 2 3 4 5 6
a b c d e f
6
a 1
5
b 3
L: u v a c a a c c length 0 5 0 5 6 0
5
6 e
5
c 4 6
d 2 f
1 2 3 4 5 6
a b c d e f
bc=5<bf= ∞,不用更新 da=5>df=2,需要更新
6
J L
7.4.3 最小生成树
在修建道路(或者铺设线路、管道)的时候, 常常考虑的是如何既能够达到连通各个地点又能够 使得所耗费的资源最少的问题。最好的办法就是把 这些现实的问题抽象成图,比如把城市抽象成顶点 (假设有n个),把城市之间的可能存在的道路抽象 成边,从该图中寻找n-1条边,使得这n-1条边不仅 能把这n个顶点连成一个连通图,并且他们所代表的 路程之和最短。这样的连通图,形态上就是一棵树。 求解这种耗费最少的问题,就转化成为求相应图的 最小生成树(Minimum Cost Spanning Tree)的问题。

清华考研辅导班-2020清华大学962数学-数据方向基础综合考研经验真题参考书目

清华考研辅导班-2020清华大学962数学-数据方向基础综合考研经验真题参考书目

清华考研辅导班-2020清华大学962数学-数据方向基础综合考研经验真题参考书目清华大学962数学-数据方向基础综合考试科目,2020年初试时间安排为12月22日下午14:00-17:00业务课二进行笔试,清华大学自主命题,考试时间3小时。

一、适用院系及专业清华大学伯克利深圳学院0812J3数据科学与信息技术清华大学伯克利深圳学院0830J2环境科学与新能源技术二、考研参考书目清华大学962数学-数据方向基础综合有官方指定的考研参考书目,盛世清北整理如下:《数据结构》(C语言版) 清华大学出版社严蔚敏、吴伟民盛世清北建议:(1)参考书的阅读方法目录法:先通读各本参考书的目录,对于知识体系有着初步了解,了解书的内在逻辑结构,然后再去深入研读书的内容。

体系法:为自己所学的知识建立起框架,否则知识内容浩繁,容易遗忘,最好能够闭上眼睛的时候,眼前出现完整的知识体系。

问题法:将自己所学的知识总结成问题写出来,每章的主标题和副标题都是很好的出题素材。

尽可能把所有的知识要点都能够整理成问题。

(2)学习笔记的整理方法A:通过目录法、体系法的学习形成框架后,在仔细看书的同时应开始做笔记,笔记在刚开始的时候可能会影响看书的速度,但是随着时间的发展,会发现笔记对于整理思路和理解课本的内容都很有好处。

B:做笔记的方法不是简单地把书上的内容抄到笔记本上,而是把书上的关键点、核心部分记到笔记上,关上书本,要做到仅看笔记就能将书上的内容复述下来,最后能够通过对笔记的记忆就能够再现书本。

三、重难点知识梳理2020年清华大学深圳国际研究生院962 《数学-数据方向基础综合》考研考试大纲:考试内容:1.1什么是数据结构1.2基本概念和术语1.3抽象数据类型的表示与实现1.4算法和算法分析1.4.1算法1.4.2算法设计的要求1.4.3算法效率的度量1.4.4算法的存储空间需求2 线性表2.1线性表的类型定义2.2线性表的顺序表示和实现2.3线性表的链式表示和实现2.3.1线性链表2.3.2循环链表2.3.3双向链表2.4一元多项式的表示及相加3栈和队列3.1栈3.1.1抽象数据类型栈的定义3.1.2栈的表示和实现3.2栈的应用举例3.2.1数制转换3.2.2括号匹配的检验3.2.3行编辑程序3.2.4迷宫求解3.2.5表达式求值3.3栈与递归的实现3.4队列3.4.1抽象数据类型队列的定义3.4.2链队列——队列的链式表示和实现3.4.3循环队列——队列的顺序表示和实现3.5离散事件模拟4 串4.1串类型的定义4.2串的表示和实现4.2.1定长顺序存储表示4.2.2堆分配存储表示4.2.3串的块链存储表示4.3串的模式匹配算法4.3.1求子串位置的定位函数Index(S,T,pos)4.3.2模式匹配的一种改进算法4.4串操作应用举例4.4.1文本编辑4.4.2建立词索引表5 数组和广义表5.1数组的定义5.2数组的顺序表示和实现5.3矩阵的压缩存储5.3.1特殊矩阵5.3.2稀疏矩阵5.4广义表的定义5.5广义表的存储结构5.6m元多项式的表示5.7广义表的递归算法5.7.1求广义表的深度5.7.2复制广义表5.7.3建立广义表的存储结构6 树和二叉树6.1树的定义和基本术语6.2二叉树6.2.1二叉树的定义6.2.2二叉树的性质6.2.3二叉树的存储结构6.3遍历二叉树和线索二叉树6.3.1遍历二叉树6.3.2线索二叉树6.4树和森林6.4.1树的存储结构6.4.2森林与二叉树的转换6.4.3树和森林的遍历6.5树与等价问题6.6赫夫曼树及其应用6.6.1最优二叉树(赫夫曼树)6.6.2赫夫曼编码6.7回溯法与树的遍历6.8树的计数7 图7.1图的定义和术语7.2图的存储结构7.2.1数组表示法7.2.2邻接表7.2.3十字链表7.2.4邻接多重表7.3图的遍历7.3.1深度优先搜索7.3.2广度优先搜索7.4图的连通性问题7.4.1无向图的连通分量和生成树7.4.2有向图的强连通分量7.4.3最小生成树7.4.4关节点和重连通分量7.5有向无环图及其应用7.5.1拓扑排序7.5.2关键路径7.6最短路径7.6.1从某个源点到其余各顶点的最短路径7.6.2每一对顶点之间的最短路径8 动态存储管理8.1概述8.2可利用空间表及分配方法8.3边界标识法8.3.1可利用空间表的结构8.3.2分配算法8.3.3回收算法8.4伙伴系统8.4.1可利用空间表的结构8.4.2分配算法8.4.3回收算法8.5无用单元收集8.6存储紧缩9 查找9.1静态查找表9.1.1顺序表的查找9.1.2有序表的查找9.1.3静态树表的查找9.1.4索引顺序表的查找9.2动态查找表9.2.1二叉排序树和平衡二叉树9.2.2B树和B+树9.2.3键树9.3哈希表9.3.1什么是哈希表9.3.2哈希函数的构造方法9.3.3处理冲突的方法9.3.4哈希表的查找及其分析10 内部排序10.1概述10.2插入排序10.2.1直接插入排序10.2.2其他插入排序10.2.3希尔排序10.3快速排序10.4选择排序10.4.1简单选择排序10.4.2树形选择排序10.4.3堆排序10.5归并排序10.6基数排序10.6.1多关键字的排序10.6.2链式基数排序10.7各种内部排序方法的比较讨论11 外部排序11.1外存信息的存取11.2外部排序的方法11.3多路平衡归并的实现11.4置换一选择排序11.5最佳归并树12 文件12.1有关文件的基本概念12.2顺序文件12.3索引文件12.4ISAM文件和VSAM文件12.4.1ISAM文件12.4.2VSAM文件12.5直接存取文件(散列文件)12.6多关键字文件12.6.1多重表文件12.6.2倒排文件四、考研真题2009年,教育部出台了严格管理院校自主命题专业考试科目相关资料、限制专业课辅导的规定,很多学校从那时起不再公布和出售真题,并不再提供专业课参考书目。

求无向连通图的最小生成树算法

求无向连通图的最小生成树算法

求无向连通图‎的最小生成树‎算法——Prim与K‎r uskal‎及相关优化最小生成树是‎图论里很重要‎的部分。

但是由于它属‎于图论所以N‎O IP基本不‎考,对于NOI又‎太基础,所以竞赛中出‎现的几率比较‎小,即使要考也不‎可能考裸的生‎成树算法= =最小生成树就‎P rim和K‎r uskal‎两个算法,又没有多大的‎优化余地,所以学习起来‎还是很简单的‎。

一.Prim算法‎1.算法思想对于图G=(V,E),用Prim算‎法求最小生成‎树T=(S,TE)的流程如下① 初始化:设S、TE为空集,任选节点K加‎入S。

②选取一条权值‎最小的边(X,Y),其中X∈S,且not (Y∈S)即,选取一条权值‎最小的、连接着S中一‎点与S外一点‎的边。

将Y加入S中‎,边(X,Y)加入TE中重复② 直到V=S即所有G中‎的点都在S中‎,此时的T为G‎的最小生成树‎。

由此流程可见‎,Prim算法‎求最小生成树‎时任何时候的‎T都是一颗树‎。

2.实现显然,Prim算法‎的主要运行时‎间花在过程②的选边中。

看起来复杂度‎是O(VE)=O(V^3)不是么,效率也太低了‎吧……为了比较快速‎地选边,我们用两个数‎组lowco‎s t、closes‎t动态地维护‎每一个点到S‎的最短距离。

在某一状态下‎,lowcos‎t[i]表示所有与i‎相连且另一端‎点在S中的边‎中的权值最小‎值,closes‎t[i]表示在S中且‎与i相连的点‎中与i之间距‎离最小的点。

显然,lowcos‎t[i]=w(i,closes‎t[i])。

需要注意的是‎两个数组记录‎的都是边而不‎是路径。

若i没有边直‎接连向S,则lowco‎s t[i]=∞。

另外,若i已在S中‎,则lowco‎s t[i]=0。

设出发点为x‎。

初始时对于任‎意k∈V,closes‎t[k]=x,lowcos‎t[k]=w(k,x)【w(i,j)表示i、j间的距离。

初始化时,若两点间没有‎边则w(i,j)赋为一个足够‎大的整数(如maxin‎t),并且所有点到‎自身的距离赋‎为0,即w(i,i)=0】每一次找出l‎o wcost‎中不为0的最‎小值lowc‎o st[i],然后把i加入‎S(即lowco‎s t[i]:=0),然后对于图中‎所有点k,若w(k,i)<lowcos‎t[k],则把lowc‎o st[k]赋为w(k,i),把close‎s t[k]赋为i。

专升本数据结构考试题1(还有很多哦,大家进我的账号下载)

专升本数据结构考试题1(还有很多哦,大家进我的账号下载)

大纲一、考试性质本考试是为在计算机专科生中招收本科生而实施的具有选拔功能的水平考试,其指导思想是既要有利于国家对高层次人材的选拔,又要有利于促进高等学校各类课程教学质量的提高,考试对象为2003年参加专升本考试的考生。

二、考试的基本要求要求学生比较系统地理解数据结构的基本概念和基本知识,掌握表、栈、队列、树和图等数据结构的基本特征和在计算机上实现的方法,要求考生具有抽象思维能力、逻辑推理能力、综合运用所学的知识分析问题和解决问题的能力,以及软件设计和编程能力。

三、考试方法和考试时间考试方法为闭卷笔试,考试时间为120分钟。

四、考试内容和要求1、绪论考试内容:数据结构基本概念和术语,算法、算法的描述和算法分析。

考试要求(1)了解非数值问题的数学模型不是数学方程,而是表、树和图之类的数据结构。

(2)理解数据、数据元素、数据对象、数据结构和数据类型等的定义。

(3)掌握数据的逻辑结构和存储结构及其种类;算法的重要特征等。

(4)会根据语句的最大频度计算算法的时间复杂度的方法。

2、线性表考试内容:线性表的定义、线性表的逻辑结构、线性表的顺序存储结构和链式存储结构,单向链表、循环链表和双向链表,一元多项式的表示及相加。

考试要求(1)了解线性表的定义和线性结构的特点。

(2)理解线性表的顺序存储和链式存储,理解数组与单链表表示表的优缺点。

(3)掌握线性顺序表中数据元素的存储位置的计算,顺序表、单向链表、循环链表和双向链表的插入、删除等有关操作。

(4)会用单链表编写插入、删除等有关算法。

(5)能够从时间和空间复杂度的角度综合比较两存储结构的特点及适用场合。

3、栈和队列考试内容:栈的定义、栈的表示和实现;队列的定义、队列的表示和实现,链队列、循环队列。

考试要求(1)了解栈和队列的定义。

(2)理解线性表、栈和队列特点及区别,栈对实现递归过程的作用。

(3)掌握顺序栈、链栈的入栈和出栈操作,顺序队列、链队列的入队和出队操作,循环队列的队空和队满的判断。

无向树及生成树

无向树及生成树

例9.4:无向树G有2个2度结点,1个3度结点, 3个4度结点,则其1度结点数为多少?
解:由握手定理 2m=∑d(vi) 及定理9.1 n = m+1
设G有t个1顶点, 则有下列关系式 2 x 2+3+4 x 3+t =2 m =2 x(n-1) =2 x(2+1+3+t-1) 解得:t = 9
例 9.5:无向树G有8片树叶,2个3度分支点, 其余分支点均为4度,问G有多少个4度分支点? 画出其非同构的情况。
解:设G有t个4度分支点,则有下列关系式 8 x 1+2 x 3+ t x 4 =2 x(8+2+t-1) 解得:t = 2
n
则G中共有12个顶点,11条边,度数序列之 和为22, △ (Ti)=4, (Ti)=1, 度序列为: 1,1,1,1,1,1,1,1,3,3,4, 4 其非同构的图形为:
1 8
2
7
a
2
h
4
g
3 4
d
4
6
b
c
例9.8:铺设一个连接各个城市的光纤 通信网络。 (单位:万元)
f
54
8 15
12 38 28 20 60
e
30
10
25 62
a
36
38
h
40
g
45
d
48
b
c
例9.9:用Kruskal算法求下图 的最小生成树。
。 。 。


OK!
例9.10:用Kruskal算法求下图的最小生成树。 。
c b h d e
i
定义9.5 设无向连通带权图G=<V,E,W>,T是G的一 棵生成树,T的各边权之和称为T的权,记作 W(T)。G的所有生成树中权最小的生成树称为 G的最小生成树。 求最小生成树的算法很多,我们只介绍避 圈法(Kruskal算法)

七图

七图

n图的基本概念n图的存储结构n图的遍历与连通性n最小生成树n最短路径n活动网络7.1图的基本概念n图定义图是由顶点集合(vertex)及顶点间的关系集合组成的一种数据结构:Graph=( V, E )其中V= { x| x ∈某个数据对象}是顶点的有穷非空集合;E= {(x, y) |x, y ∈V }或E= {<x, y>|x, y ∈V&& Path(x, y)}是顶点之间关系的有穷集合,也叫做边(edge)集合。

Path(x, y)表示从x 到y 的一条单向通路, 它是有方向的。

n有向图与无向图在有向图中,顶点对<x, y>是有序的。

在无向图中,顶点对(x, y)是无序的。

n完全图若有n 个顶点的无向图有n(n-1)/2 条边, 则此图为完全无向图。

有n 个顶点的有向图有n(n-1) 条边, 则此图为完全有向图。

邻接顶点如果(u, v) 是E(G) 中的一条边,则称u 与v 互为邻接顶点。

n权某些图的边具有与它相关的数,称之为权。

这种带权图叫做网络。

n 子图设有两个图G =(V ,E )和G ,=(V ,,E ,)。

若V ,⊆V 且E,⊆E ,则称图G ,是图G 的子图。

n顶点v 的入度是以v 为终点的有向边的条数, 记作ID(v ); n顶点v 的出度是以v 为始点的有向边的条数, 记作OD(v )。

n 在有向图中, 顶点的度等于该顶点的入度与出度之和。

n 路径在图G =(V , E ) 中, 若从顶点v i 出发, 沿一些边经过一些顶点v p 1, v p 2, …, v pm ,到达顶点v j 。

则称顶点序列( v i v p 1 v p 2 ... v pm v j )为从顶点v i 到顶点v j 的路径。

它经过的边(v i , v p 1)、(v p 1, v p 2)、...、(v pm ,v j )应是属于E 的边。

n 路径长度u 非带权图的路径长度是指此路径上边的条数。

第7章图(下)-数据结构简明教程(第2版)-微课版-李春葆-清华大学出版社

第7章图(下)-数据结构简明教程(第2版)-微课版-李春葆-清华大学出版社



(1)置U的初值等于V(即包含有G中的全部顶点),TE的初
和 最
值为空集(即图T中每一个顶点都构成一个连通分量)。

(2)将图G中的边按权值从小到大的顺序依次选取:若选取


的边未使生成树T形成回路,则加入TE;否则舍弃,直到TE中包

含n-1条边为止。
实现克鲁斯卡尔算法的关键是如何判断选取的边是否与生成树 中已保留的边形成回路?
7.4
建立了两个辅助数组closest和lowcost。
所有顶点分为U和V-U两个顶点集。
U中的顶点i:lowcost[i]=0;

V-U中的顶点j:lowcost[j]>0。




小 生
i
j


U中i:lowcost[i]=0
V-U中j:lowcost[j]>0
7.4
实现普里姆算法(2/3):

通过深度优先遍历产生的生成树称为深度优先生成树。


通过广度优先遍历产生的生成树称为广度优先生成树。






无向图进行遍历时:
7.4
连通图:仅需要从图中任一顶点出发,进行深度优先遍历或广
度优先遍历便可以访问到图中所有顶点,因此连通图的一次遍
历所经过的边的集合及图中所有顶点的集合就构成了该图的一
7.4
为此设置一个辅助数组vset[0..n-1],它用于判定两个顶点之

间是否连通。

数组元素vset[i](初值为i)代表编号为i的顶点所属的连通

子图的编号。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7.4.1无向图的连通分量和生成树。

void DFSForest(Graph G,CSTree &T)
//建立无向图G的深度优先生成森林的
//(最左)孩子(右)兄弟链表T。

{
T=NULL;
for(v=0;v<G.vexnum;++v)
visited[v]=FALSE;
for(v=0;v<G.vexnum;++v)
{
if(!visited[v]) //第v顶点为新的生成树的根节点。

{
p=(CSTree)malloc(sizeof(CSNode)); //分配根节点。

*p={GetVex(G,v),NULL,NULL}; //给该节点赋值。

if(!T) T=p; //是第一棵生成树的根(T的根)。

else q->nextSibling=p; //是其他生成树的根(前一棵的根的“兄弟”)。

q=p; //q指示当前生成树的根。

DFSTree(G,v,p); //建立以p为根的生成树。

}// if(!visited[v])
}// for(v=0;v<G.vexnum;++v)
}// DFSForest
Void DFSTree(Graph G,int v,CSTree &T)
//从第v个顶点出发深度优先遍历图G,建立以T为根的生成树。

{
visited[v]=TRUE;first=TRUE;
for(w=FirstAdjVex(G,v);w;w=NextAdjVex(G,v,w))
{
if(!visited[w])
{
p=(CSTree)malloc(sizeof(CSNode)); //分配孩子节点。

*p={GetVex(G,w),NULL,NULL};
if(first) //w是v的第一个未被访问的邻接顶点
{ //是根的左孩子节点。

T->lchild=p;first=FALSE;
}// if(first)
else //w是v的其它未被访问的邻接顶点
{ //是上一邻接顶点的右兄弟节点。

q->nextsibling=p;
}// else
q=p;
DFSTree(G,w,q); //从第w个顶点出发深度优先遍历图G,建立子生成树q。

}// if(!visited[w])
}// for(w=FirstAdjVex(G,v);
}// DFSTree
7.4.2有向图的强连通分量。

asdfasdfdfasd。

相关文档
最新文档