数据结构第七章关于图的存储、遍历、拓扑排序等_百度文.
数据结构第7章习题答案

第7章 《图》习题参考答案一、单选题(每题1分,共16分)( C )1. 在一个图中,所有顶点的度数之和等于图的边数的倍。
A .1/2 B. 1 C. 2 D. 4 (B )2. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。
A .1/2 B. 1 C. 2 D. 4 ( B )3. 有8个结点的无向图最多有条边。
A .14 B. 28 C. 56 D. 112 ( C )4. 有8个结点的无向连通图最少有条边。
A .5 B. 6 C. 7 D. 8 ( C )5. 有8个结点的有向完全图有条边。
A .14 B. 28 C. 56 D. 112 (B )6. 用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。
A .栈 B. 队列 C. 树 D. 图 ( A )7. 用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。
A .栈 B. 队列 C. 树 D. 图( C )8. 已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是( D )9. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按深度优先遍历的结点序列是A . 0 2 4 3 1 5 6 B. 0 1 3 5 6 4 2 C. 0 4 2 3 1 6 5 D. 0 1 23465 ( D )10. 已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是( A )11. 已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是A .0 2 4 3 1 5 6B. 0 1 3 6 5 4 2C. 0 1 3 4 2 5 6D. 0 3 6 1 5 4 2⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡0100011101100001011010110011001000110010011011110A .0 1 3 2 B. 0 2 3 1 C. 0 3 2 1 D. 0 1 2 3A.0 3 2 1 B. 0 1 2 3C. 0 1 3 2D. 0 3 1 2(A)12. 深度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(D)13. 广度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(A)14. 任何一个无向连通图的最小生成树A.只有一棵 B. 一棵或多棵 C. 一定有多棵 D. 可能不存在(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)二、填空题(每空1分,共20分)1. 图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。
数据结构7-图 完整版

其中: V2={A, B, C, D, E} VR2={(A,B),(A,C),(E,C), (E,D),(D,B) }
5
有向图、无向图示例
A D C
G1
B
1 3
2 4 6
G2
E
5
下列形式的图本章不作讨论
6
完全图、稀疏图与稠密图
n:图中顶点的个数; e:图中边或弧的数目。
2
1 0 3 (a) 1 2 3 (b) 0
q图的应用广泛:
ü ü ü
电路网络分析、交通运输、管理与线路的铺设 印刷电路板与集成电路的布线、社会网络、WEB链接图 工程进度的安排、课程表的制订、关系数据库的设计
2
7.1 图的定义和术语 一、图的结构定义:
q 图是由一个顶点集 V 和一个顶点间的关系集合弧集VR
(边的集合)构成的数据结构。
ü 可以用二元组定义为: Graph = (V, VR ) ü 其中,VR={<v,w>| v,w∈V 且 P(v,w)} ü 谓词 P(v,w) 定义了弧 <v,w>的意义或信息。
T5,T6不是有向树
22
● 有向图的生成树/生成森林:
含有图的全部顶点,但只有足以构成若干互不相交的有向树的弧。
A F
B E
G
C D
A F
B E
F1
C D
A
D B
F2
?
F E
C
A F
B E
T1
C D
?
D C B
T2
A E A F E
T3
D B C
F
23
图的抽象数据类型定义
q
数据结构(C语言版) 第七章 图

路径与连通性
路径、简单路径、回路(环)、简单回路
顶点之间的连通性、无向连通图、有向强连通
图
4/46
7.1 图的定义和术语(3)
路径与连通性
对于有向图G1
V1V3V4V1V2 是从V1 到V2 的路径, 不是简单路径;
V1V2是简单路径; V1V3V4V1V3V4V1是环,不是简单环; V1V3V4V1是简单环。
3/46
7.1 图的定义和术语(2)
有向图
弧<v,w> ∊ E (v,w ∊V),w为弧头, v为弧尾; 顶点v
邻接到顶点w,顶点w 邻接自顶点v,弧< v, w >和 顶点v、w相关联。
顶点v 的入度是以v 为弧头的弧的数目,记为ID(v); v 的出度是以v为弧尾的弧的数目,记为OD(v); v 的度是TD(v) = ID(v) + OD(v)。
}VNode, AdjList[MAX_VERTEX_NUM];
这种存储结构适合于进行first_adj(G,v) 找v的第一个邻接点的操作
邻接矩阵的方法适合存储稠密图
26/46
7.2.2 邻接表--- 链式存储结构
邻接表是一种顺序存储与链式结构相结 合的存储方式,类似于树的孩子链表。
对每个顶点建立一个单链表,第i个单链 表中的结点表示依附于顶点vi的边。
邻接矩阵
从邻接矩阵M中可以看出该图 共有( )个顶点;如果是有 向图该图共有( )条弧,如 果是无向图,则共有( )边。
AB CD
G
25/46
邻接矩阵存储的特点
无向图的邻接矩阵是对称的,对n个顶 点的无向图只需要存入下三角矩阵,即 需要n(n-1)/2个存储单元。
有向图的邻接矩阵所需要的存储单元不 一定,需要N*N个存储单元
数据结构:第7章 图4-拓扑排序和关键路径

拓扑排序算法
拓扑排序方法: (1)在AOV网中选一个入度为0的顶点(没有前驱) 且输出之; (2)从AOV网中删除此顶点及该顶点发出来的所 有有向边; (3)重复(1)、(2)两步,直到AOV网中所有 顶点都被输出或网中不存在入度为0的顶点。
从拓扑排序步骤可知,若在第3步中,网中所有顶 点都被输出,则表明网中无有向环,拓扑排序成功。 若仅输出部分顶点,网中已不存在入度为0的顶点, 则表明网中有有向环,拓扑排序不成功。
拓扑序列:C1--C2--C3 (3)
C12 C9 C10
C7 C8 C6
C11
拓扑序列:C1--C2--C3--C4 (4)
C7
C12
C12
C8
C8 C9 C10
C6
C9 C10
C6
C11
C11 拓扑序列:C1--C2--C3--C4--C5
(5)
拓扑序列:C1--C2--C3--C4--C5--C7 (6)
在 (b)中,我们用一种有向图来表示课程开设
拓扑排序
1.定义 给出有向图G=(V,E),对于V中的顶点的线性序列 (vi1,vi2,...,vin),如果满足如下条件:若在G中从 顶点 vi 到vj有一条路径,则在序列中顶点vi必在 顶点 vj之前;则称该序列为 G的一个拓扑序列。 构造有向图的一个拓扑序列的过程称为拓扑排序。 2.说明 (1)在AOV网中,若不存在回路,则所有活动可排成 一个线性序列,使得每个活动的所有前驱活动都排 在该活动的前面,那么该序列为拓扑序列. (2)拓扑序列不是唯一的.
2.AOV网实际意义
现代化管理中, 通常我们把计划、施工过程、生产流程、 程序流程等都当成一个工程,一个大的工程常常被划分 成许多较小的子工程,这些子工程称为活动。在整个工 程实施过程中,有些活动开始是以它的所有前序活动的 结束为先决条件的,必须在其它有关活动完成之后才能 开始,有些活动没有先决条件,可以 安排在任意时间开 始。AOV网就是一种可以形象地反映出整个工程中各个 活动之间前后关系的有向图。例如,计算机专业学生的 课程开设可看成是一个工程,每一门课程就是工程中的 活动,下页图给出了若干门所开设的课程,其中有些课 程的开设有先后关系,有些则没有先后关系,有先后关 系的课程必须按先后关系开设,如开设数据结构课程之 前必须先学完程序设计基础及离散数学,而开设离散数 学则必须先并行学完数学、程序设计基础课程。
数据结构 (C语言版)课件:第7章_图

2020/9/30
3
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 无向图和有向图
● 无向图:如果图中顶点 vi 和 vj 之间的边无方向,则称这条边为无向边, 用无序偶对 (vi, vj) 表示,称该图为无向图。
● 有向图:如果图中顶点 vi 和 vj 之间的边有方向,则称这条边为有向边, 用有序偶对 <vi, vj> 表示,称该图为有向图。
无论有向图还是无向图,顶点数 n、边 数 e 和度数之间满足:
2020/9/30
8
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 权和网
● 权:权通常是指对图中边赋予的有意义的数值量。在实际应用中,权 可以有具体的含义。
● 网:如果将图中的每条边上都赋上一个权值,则称这种图为网,或称 为有权图 。
2020/9/30
6
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 稀疏图和稠密图
● 稀疏图:边数很少的图称为稀疏图,如果 e 表示图中的边数,n 表示 图中的顶点数,则 e<nlogn。
● 稠密图:边数很多的图称为稠密图,如果 e 表示图中的边数,n 表示 图中的顶点数,则 e≥nlogn。
2020/9/30
无向完全图
有向完全图
5
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 邻接和依附
● 邻接:对图 G=(V, VR),如果边 (vi, vj)∈VR,则称顶点 vi 和 vj 互为邻 接点;如果弧<vi, vj>∈VR,则称顶点 vi 邻接到 vj,vj 邻接自 vi。
● 依附:对图 G=(V, VR),如果边 (vi, vj)∈VR 或弧 <vi, vj>∈VR,则称 边 (vi, vj) 或弧 <vi, vj> 依附于顶点 vi 和 vj。
数据结构课件

while (i>0)
{
/*读入顶点对号,建立边表*/
e++;
/*合计边数 */
p = (pointer)malloc(size(struct node));/*生成新旳邻接点序号为j旳表结点*/
p-> vertex = j;
p->next = ga->adlist[i].first;
ga->adlist[i].first = p;
三个强连通分量
第七章 图
权:图旳边具有与它有关旳数, 称之为权。这种带 权图叫做网络。
10
1
6
15
27 5
12
3 76
9
8
6 3
4
16
7
有向权图
60
AB 40 80 C源自307535
D
E
45
无向权图
第七章 图
生成树:连通图G旳一种子图假如是一棵包 括G旳全部顶点旳树,则该子图称为G旳生成
树;显然,n个顶点旳生成树具有n-1条边
scanf (“%d”, &(ga->n));
for (i =1; i<= ga->n; i++)
{
/*读入顶点信息,建立顶点表*/
scanf (“ \n %c”, &( ga->adlist[i].data) )
;
ga->adlist[i].first = NULL; }
e = 0; /*开始建邻接表时,边数为0*/
ga->edges[i][j] = 0;
for (k = 0;k<ga->e;k++) /*读入边旳顶点编号和权值,建立邻接矩阵*/