数据结构:第六章 图
北邮数据结构第六章答案详解 图(1)

1
5
1
54 3
42
5 66
图 6-8 图 G 答案:根据不同算法构造的最小生成树如图 6-9 所示的图(a)和(b)
2
④
⑤ 5
1
①
4 3
②
③
6
2
⑤
③ 5
1
①
4 3
④
②
6
(a) Prim 生成树
(b) Kruskal 生成树
图 6-9 最小生成树
5、算法设计
(1)以邻接表为存储结构,设计实现深度优先遍历的非递归算法。
int top = -1; cout<<v<<’\t’; bVisited[v] = true; stack[++top] = v;
//访问结点 v //设置访问标记 //结点 v 入栈
while (top!=-1)
{
v=stack[top];
ArcNode<T> *p = adjlist[v]. firstarc; ①
)
A.1
B. n/2
C.n-1
D.n
解析:若超过 n-1,则路径中必存在重复的顶点
答案:C
(5) 若一个图中包含有 k 个连通分量,若按照深度优先搜索的方法访问所有顶点,则必
须调用(
)次深度优先搜索遍历的算法。
A.k
B.1
C.k-1
D.k+1
解析:一次深度优先搜索可以访问一个连通分量中的所有结点,因此 k 个连通分量需要 调用 k 次深度优先遍历算法。
④
} if (p==NULL) top--;
⑤//若是找不到未访问的结点,出栈
数据结构-第6章 树和二叉树---4. 树和森林(V1)

6.4.1 树的存储结构
R AB C D EG F
R⋀
A
⋀D
⋀B
⋀E ⋀
C⋀
⋀G
⋀F ⋀
6.4.2 树、森林和二叉树的转换
1. 树转换为二叉树 将树转换成二叉树在“孩子兄弟表示法”中已 给出,其详细步骤是: ⑴ 加线。在树的所有相邻兄弟结点之间加一 条连线。 ⑵ 去连线。除最左的第一个子结点外,父结点 与所有其它子结点的连线都去掉。 ⑶ 旋转。将树以根结点为轴心,顺时针旋转 450,使之层次分明。
B C
D
A E
L HK
M
技巧:无左孩子 者即为叶子结点
6.4.3 树和森林的遍历
1. 树的遍历 由树结构的定义可知,树的遍历有二种方法。 ⑴ 先序遍历:先访问根结点,然后依次先序 遍历完每棵子树等。价于对应二叉树的先序遍历
⑵ 后序遍历:先依次后序遍历完每棵子树,然 后访问根结点。等价于对应二叉树的中序遍历
0 R -1 1A 0 2B 0 3C 0
}Ptree ; R
4D 1 5E 1
AB C
6F 3
7G 6
DE
F
8H 6
9I 6
G H I 10~MAX_Size-1 ... ...
6.4.1 树的存储结构
2. 孩子表示法
每个结点的孩子结点构成一个单链表,即有n 个结点就有n个孩子链表;
n个孩子的数据和n个孩子链表的头指针组成一 个顺序表; 结点结构定义: 顺序表定义:
typedef struct PTNode { ElemType data ;
《数据结构(C语言版 第2版)》(严蔚敏 著)第六章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第六章练习题答案第6章图1.选择题(1)在一个图中,所有顶点的度数之和等于图的边数的()倍。
A.1/2B.1C.2D.4答案:C(2)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。
A.1/2B.1C.2D.4答案:B解释:有向图所有顶点入度之和等于所有顶点出度之和。
(3)具有n个顶点的有向图最多有()条边。
A.n B.n(n-1)C.n(n+1)D.n2答案:B解释:有向图的边有方向之分,即为从n个顶点中选取2个顶点有序排列,结果为n(n-1)。
(4)n个顶点的连通图用邻接距阵表示时,该距阵至少有()个非零元素。
A.n B.2(n-1)C.n/2D.n2答案:B所谓连通图一定是无向图,有向的叫做强连通图连通n个顶点,至少只需要n-1条边就可以了,或者说就是生成树由于无向图的每条边同时关联两个顶点,因此邻接矩阵中每条边被存储了两次(也就是说是对称矩阵),因此至少有2(n-1)个非零元素(5)G是一个非连通无向图,共有28条边,则该图至少有()个顶点。
A.7B.8C.9D.10答案:C解释:8个顶点的无向图最多有8*7/2=28条边,再添加一个点即构成非连通无向图,故至少有9个顶点。
(6)若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是()图。
A.非连通B.连通C.强连通D.有向答案:B解释:即从该无向图任意一个顶点出发有到各个顶点的路径,所以该无向图是连通图。
(7)下面()算法适合构造一个稠密图G的最小生成树。
A.Prim算法B.Kruskal算法C.Floyd算法D.Dijkstra算法答案:A解释:Prim算法适合构造一个稠密图G的最小生成树,Kruskal算法适合构造一个稀疏图G的最小生成树。
(8)用邻接表表示图进行广度优先遍历时,通常借助()来实现算法。
A.栈 B.队列 C.树D.图答案:B解释:广度优先遍历通常借助队列来实现算法,深度优先遍历通常借助栈来实现算法。
北京林业大学《数据结构与算法》课件PPT 第6章 图

北京林业大学信息学院
路径:接续的边构成的顶点序列。 路径长度:路径上边或弧的数目/权值之和。 回路(环):第一个顶点和最后一个顶点相同的路径。 简单路径:除路径起点和终点可以相同外,其余顶点均不相同
的路径。 简单回路(简单环):除路径起点和终点相同外,其余顶点均不
• 原来烤肉店老板是伊拉克移民,有个朋友住在加州 ,刚好这个朋友的同事,是电影《这个男人有点色 》的制作人的女儿在女生联谊会的结拜姐妹的男朋 友,而马龙·白兰度主演源自这部片子。北京林业大学信息学院
验证—数据
• 微软的研究人员过滤2006年某个单一月份 的MSN短信
• 利用二点四亿使用者的三百亿通讯息进行 比对,结果发现任何使用者只要通过平均 6.6人就可以和全数据库的一千八百亿组配 对产生关连。
相同的路径。
北京林业大学信息学院
连通图(强连通图)
在无(有)向图G=( V, {E} )中,若对任何两个顶点 v、u 都存在从v 到 u 的路径,则称G是连通图(强 连通图)。
连 通 图
V0
V1
V2
V3
V4
V0 V3
V1 V4
非 连
通
V2 V5 图
强 V0
V1
连
通
图 V2
V3
北京林业大学信息学院
V0
北京林业大学信息学院
验证—实例
• 烤肉店老板——加州朋友——朋友同事—— 制作人的女儿——制作人——马龙·白兰度
• 一家德国报纸接受了一项挑战,要帮法兰克福的一 位土耳其烤肉店老板,找到他和他最喜欢的影星马 龙·白兰度的关联。
• 经过几个月,报社的员工发现,这两个人只经过不 超过六个人的私交,就建立了人脉关系。
数据结构第六章图理解练习知识题及答案解析详细解析(精华版)

图1. 填空题⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。
【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。
⑵任何连通图的连通分量只有一个,即是()。
【解答】其自身⑶图的存储结构主要有两种,分别是()和()。
【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。
⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。
【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。
⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。
【解答】求第j列的所有元素之和⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。
【解答】出度⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。
【解答】前序,栈,层序,队列⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。
【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。
⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。
【解答】回路⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。
【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。
云大《数据结构》课程教学课件-第6章 树和二叉树(147P)_OK

^d ^ ^ e ^ 三叉链表
3)二叉链表是二叉树最常用的存储结构。还有其它链接方 法,采用何种方法,主要取决于所要实施的各种运算频度。
例:若经常要在二叉树中寻找某结点的双亲时,可在每个结 点上再加一个指向其双亲的指针域parent,称为三叉链表。
lchild data parent rchild
2021/8/16
2021/8/16
9
6.2 二 叉 树
6.2.1 二叉树的概念
一、二叉树的定义: 二叉树(Binary Tree)是n(n>=0)个结点的有限集,它或者是 空集(n=0)或者由一个根结点和两棵互不相交的,分别称 为根的左子树和右子树的二叉树组成。 可以看出,二叉树的定义和树的定义一样,均为递归定 义。
A
集合3
集合1
BCD
EF
G
集合2
2021/8/16
3
2、树的表示方法 1)树形图法
A
BCD
EF
G
2)嵌套集合法
3)广义表形式 ( A(B, C(E,F), D(G) )
4)凹入表示法
2021/8/16
A B
D
CG
EF
A B C E DF G
4
3、 树结构的基本术语
1)结点的度(Degree):为该结点的子树的个数。 2)树的度:为该树中结点的最大度数。
7)路径(Path):若树中存在一个结点序列k1,k2,…,kj,使得ki是 ki+1的双亲(1<=i<j),则称该结点序列是从ki到kj一条路径 (Path)
路径长度:路径的长度为j-1,其为该路径所经过的边的数 目。
A
BCD
EF
G
数据结构与算法分析

路径
1.
2.
3. 4. 5.
6.
在无向图G 中,若存在一个顶点序列vp ,vi1 , vi2 , …vim ,vq,使得 (vp ,vi1),(vi1 ,vi2), …,(vim ,vq )∈E(G),则称顶点序列 (vp ,vi1),(vi1 ,vi2), …,(vim ,vq )∈E(G) 为从vp到vq的一条 (Path)。 在有向图G 中,若存在一个顶点序列vp ,vi1 , vi2 , …vim ,vq,使得有 向边<vp ,vi1>, <vi1 ,vi2>, …,<vim ,vq >∈E(G),则称顶点vp路到vq有 一条有向路径(Path)。 无权图的路径长度是指此路径上边的条数。 有权图的路径长度是指路径上各边的权之和。 简单路径:若路径上各顶点vp ,vi1 , vi2 , …vim ,vq均不互相同, 则称这 样的路径为简单路径。 环:若简单路径长度大于2,且第一个顶点v1 与最后一个顶点vm 重 合, 则称这样的简单路径为回路或环。
3 0 1 0 1 6 4 2
3
0 1
4
2
3
2
6
5
4
5
G的连通分量
6
5
是连通分量吗?
无向图G
强连通
在有向图中, 若一对顶点vi和vj存在一条从vi到vj和从vj到vi的路径, 则 称vi和vj是强连通的。 若有向图中任意两个顶点都是强连通的,则称该图为强连通图。 有向图的极大强连通子图称为图的强连通分量 例:
0 1 3
2 4
无向图G1
有向图
若图G的每条边都有方向,则称G为有向图(Digraph)。 有向边(即弧)由两个顶点组成的有序对来表示,记为< 起始点,终止点y> (也可称<弧尾,弧头>)。 举例: V(G2)={0,1,2,3,4} E(G2)={<0,3>,<1,0>,<1,2>,<3,1>,<3,4>,<4,2>}
数据结构第6章树和二叉树3树和森林ppt课件

§6.4 树和森林 ❖树的存储结构——孩子兄弟表示法
这种存储结构便于实现各种树的操作。首先易于 实现找结点孩子等的操作。如果为每个结点增设一个 (parent)域,则同样能方便地实现Parent(T, x)操作。
§6.4 树和森林
❖森林和二叉树的转换
1. 树和二叉树的对应关系 由于二叉树和树都可用二叉链表作为存储结构,
R AB C
DE
F
GHK
R^
A
^D
^B
^E ^
C^
F^
^G
^H
^K ^
§6.4 树和森林
❖树的二叉链表(孩子 - 兄弟)存储表示
typedef struct CSNode { Elem data; struct CSNode *firstchild , *nextsibling;
} CSNode, *CSTree;
A BC D E F GH
A BC D
E F GH A
BC D
1)在兄弟之间加一条连线; 2)对每个结点,除了左孩子外,去除其与其余孩子之间的联系; 3)以根结点为轴心,将整个树顺时针转45°。
Ia
A B
Ib
E F
d
C D
G H I
c E F G H I
§6.4 树和森林
❖森林和二叉树的转换
2. 森林和二叉树的对应关系 从树的二叉链表表示的定义可知,任何一棵
§6.4 树和森林
3
6^
5^
0
1
7
8
2^ 9^
R AB C
DE
F
GHK
§6.4 树和森林 ❖树的存储结构——孩子兄弟表示法
或称二叉树表示法,或称二叉链表表示法。即以 二叉链表作树的存储结构。链表中结点的两个链域分 别指向该结点的第一个孩子结点和下一个兄弟结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
有错误!
2
v exs
3 4
5
6
二、邻接表 (Adjacency List)
类似于树的孩子链表示法。
方法:把同一个顶点发出的边链接在同一个边链表中, 链表的每一个结点代表一条边,叫做边结点,结点中 保存有与该边相关联的另一顶点的顶点下标 dest 和指 向同一链表中下一个边结点的指针 link。另外,每个 链表设一表头结点:存放顶点的值和指向第一个结点 的指针。并将所有表头结点存放在数组中。
无向图的邻接矩阵是对称的,有向图的邻接矩阵 可能是不对称的。
▪ 在有向图中, 统计第 i 行 1 的个数可得顶点 i 的出度, 统计第 j 列 1 的个数可得顶点 j 的入度。
▪ 在无向图中, 统计第 i 行 (列) 1 的个数可得顶点i 的度。
网络的邻接矩阵
W (i, j), 如果 i ! j 且 < i, j E 或 (i, j) E
1、无向图的邻接表
▪图的连通 在无向图G中,若两个顶点vi和vj之间有 路径存在,则称vi 和vj 是连通的。若G中任意两 个顶点都是连通的,则称G为连通图。无向图中的 极大连通子图叫做连通分量。
强连通图与强连通分量 在有向图中, 若对于每一 对顶点vi和vj, 都存在一条从vi到vj和从vj到vi的路径, 则称此图是强连通图。有向图中的极大强连通子图 叫做强连通分量。
一、图定义
图G是由两个集合V,E组成,记作:G=( V, E ) , 其中:V = { x | x 某个数据对象} ,是顶点的非空有 限集合;E = {(x, y) | x, y V } ,是顶点之间关系的 有限集合,也叫做边(edge)集合。
分为:有向图与无向图
若图G中的每条边都是有方向的,则称G为有向图。有 向边也称为弧,是顶点的有序对,记:<v,w> v,w∈V,表示:v→w.称v为始点,w为终点。
▪路径 在图G=(V,E) 中, 若存在一个顶点序列
vp1, vp2, …, vpm,使得(vi,vp1)、(vp1,vp2)、 ...、(vpm, vj)均属于E,则称顶点vi到vj存在一 条路径 。若一条路径上除了vi 和vj 可以相同外, 其余顶点均
不相同,则称此路径为一条简单路径。起点和终点相 同的路径称为简单回路或简单环。
顶点数n 与边数关系:
边数
n 1, = n -1, > n -1.
非连通图
最小连通图,树或表 非连通图
具有回路的图, 当达到最大边数时, 为完全图
✓ 图的基本概念 ✓ 图的存储结构 ✓ 图的遍历 ✓ 生成树和最小生成树 ✓ 最短路径 ✓ 拓扑排序
6.1 图的基本概念
图是一种复杂的非线性结构。图中结点之间的关系是任 意的,即任意两个结点之间都可能有关系(“多对多” 关系)。
一、邻接矩阵 (Adjacency)
用两个数组存储,一个记录各个顶点信息的顶 点表,还有一个表示各个顶点之间相邻关系的 二维数组,称邻接矩阵。
设图 A = (V, E)是一个有 n 个顶点的图,则图 的邻接矩阵是一个二维数组A .Edge[n][n],定 义:
A.Edge
[i
][
j]
1, 0,
如果 < i, j > E 或者 (i, j) E 否则
图的邻接表描述:
/*边表结点定义*/ typedef struct node { int adjvex; struct node *next; } edgenode;
/*顶点表结点*/ typedef struct { vextype vertex; edgenode *firstedge; } vexnode; vexnode ga[MaxVexNum];
路径长度:路径上边的数目。
完全图 对有n个顶点的图,若为无向图且边数为 n(n-1)/2,则称其为无向完全图;若为有向图且边数 为n(n-1) ,则称其为有向完全图。
子图 设有两个图 G=(V, E) 和 G′=(V ′, E′ )。若
V′ V 且 E ′ E, 则称 图G ′ 是 图G 的子图。
▪权 某些图的边具有与它相关的数, 称之为权。这种
带权图叫做网络。
▪权 某些图的边具有与它相关的数, 称之为权。这种
带权图叫做网络。
7
10 2
5 9
1
12
63
8
15
76
6
3
4
16
7
60
A
B 40 80 C
30
75
35
D
E
45
三、图的基本操作
建立图;图的遍历;插入新顶点;删除图中顶点; 查找;等。
6.2 图的存储结构
若图G中的每条边都是没有方向的,则称G为无向图。 边是顶点的无序对。记(v,w) v,w∈V,表示v-w.
二、术语
▪ 邻接顶点 若(u,v)是一条无向边,则称顶点u和v 互为邻接点,或称u和v相邻接。对于有向边<u,v>, 称顶点u邻接到顶点v,顶点v邻接自顶点u。
▪顶点的度 一个顶点v的度是与它相关联的边的条数。 对有向图有出、入度之分。顶点 v 的入度 是以 v 为终 点的有向边的条数; 顶点 v 的出度是以 v 为始点的有向 边的条数。顶点 v 的度等于其出、入度之和。
1 0 1 0 0
1 vexs 32
4 5
B
A
D
C
E
0 1 1 1 1
arcs 00
0 0
0 0
0 0
10
0 1 0 0 0
0 0 0 0 0
A
v
exs
CB
D
E
2
20
1
40
5
70
4
30
50
3
80
6
20 30
20
40
arcs
30
40
50
50
70
80
70 80
A.Edge
[i][
j]
=
,
否则,但是 i != j
0, 对角线 i == j
邻接矩阵表示法中图的描述
#define MaxVexNum 100 /*图的顶点数*/
typedef char vextype; /*顶点的数据类型*/
typedef float adjtype; /*权值类型*/
仅为顶点数据映像
tHale Waihona Puke pedef struct而不包含关系映像
{ vextype vexs[MaxVexNum]; /*顶点表*/
adjtype arcs[MaxVexNum][MaxVexNum]; /*边表*/
} MGraph;
2
1
4
3
5
0 1 1 1 1
arcs 11
0 0
0 0
1 0
10
1 1 0 0 0