数据结构第7章图(1)
数据结构章节练习题-答案第7章图

7.1 选择题1. 对于一个具有n个顶点和e条边的有向图,在用邻接表表示图时,拓扑排序算法时间复杂度为()A) O(n)B)O(n+e)C) O(n*n)D)O(n*n*n)【答案】B2. 设无向图的顶点个数为n,则该图最多有()条边。
A) n-1B)n(n-1)/2C)n(n+1)/2【答案】B3. 连通分量指的是()A) 无向图中的极小连通子图B) 无向图中的极大连通子图C) 有向图中的极小连通子图D) 有向图中的极大连通子图【答案】B4. n 个结点的完全有向图含有边的数目()A) n*n B) n(n+1) C) n/2【答案】D5. 关键路径是()A) AOE网中从源点到汇点的最长路径B) AOE网中从源点到汇点的最短路径C) AOV网中从源点到汇点的最长路径D) n2D) n* (n-1)D) AOV网中从源点到汇点的最短路径【答案】 A 6.有向图中一个顶点的度是该顶点的()A)入度B)出度C)入度与出度之和D)(入度+出度)12【答案】C7.有e 条边的无向图,若用邻接表存储,表中有()边结点。
A) e B) 2eC) e-1D) 2(e-1)【答案】B8.实现图的广度优先搜索算法需使用的辅助数据结构为()A)栈B)队列C)二叉树D)树【答案】B9.实现图的非递归深度优先搜索算法需使用的辅助数据结构为()A)栈B)队列C)二叉树D)树【答案】 A 10.存储无向图的邻接矩阵一定是一个()A)上三角矩阵B)稀疏矩阵C)对称矩阵D)对角矩阵【答案】C11.在一个有向图中所有顶点的入度之和等于出度之和的()倍A) B) 1C) 2D) 4答案】B12.在图采用邻接表存储时,求最小生成树的Prim 算法的时间复杂度为(A) O(n)B) O(n+e)C 0(n2)D) 0(n3))【答案】B13 .下列关于AOE网的叙述中,不正确的是()A) 关键活动不按期完成就会影响整个工程的完成时间B) 任何一个关键活动提前完成,那么整个工程将会提前完成C) 所有的关键活动提前完成,那么整个工程将会提前完成D) 某些关键活动提前完成,那么整个工程将会提前完成【答案】B14. 具有10 个顶点的无向图至少有多少条边才能保证连通()A ) 9B) 10C) 11D) 12【答案】A15. 在含n 个顶点和e 条边的无向图的邻接矩阵中,零元素的个数为()A)e B)2eC)n2-e D)n2-2e【答案】D7.2 填空题1 .无向图中所有顶点的度数之和等于所有边数的________________ 倍。
第7章 图-有向无环图

算法的执行步骤: 算法的执行步骤: 1、用一个数组记录每个结点的入度。将入度为零的 、用一个数组记录每个结点的入度。 结点进栈。 结点进栈。 2、将栈中入度为零的结点V输出。 、将栈中入度为零的结点 输出 输出。 3、根据邻接表找到结点 的所有的邻接结点, 并将 、根据邻接表找到结点V的所有的邻接结点 的所有的邻接结点, 这些邻接结点的入度减一。 这些邻接结点的入度减一 。 如果某一结点的入度变 为零,则进栈。 为零,则进栈。
3
2
3、找到全为零的第 k 列,输出 k 、 4、将第 k 行的全部元素置为零 、 行的全部元素置为零
…………………
7
53、4;直至所有元素输出完毕。 、 ;直至所有元素输出完毕。
1 2 3 4 5 6 7
0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0
template<class T> int BinaryTree <T>:: NumOfOne ( node <T> *t )
{ int k=0; if (t==NULL ) //空二叉树 //空二叉树 return 0; if (t所指结点 的度为 k=1 所指结点 的度为1) k=1; d1= NumOfOne ( t->lchild); //递归求左子树叶结点数 //递归求左子树叶结点数 d2= NumOfOne ( t->rchild); } //递归求右子树叶结点数 //递归求右子树叶结点数 return (d1+d2+k);
A B
AOE网络:结点为事件,有向边指向表示事件的执行次序。 网络:结点为事件,有向边指向表示事件的执行次序。 网络 有向边定义为活动,边的权值为活动进行所需要的时间。 有向边定义为活动,边的权值为活动进行所需要的时间。
第7章图_数据结构

v4
11
2013-8-7
图的概念(3)
子图——如果图G(V,E)和图G’(V’,E’),满足:V’V,E’E 则称G’为G的子图
2 1 4 3 5 6 3 5 6 1 2
v1 v2 v4 v3 v2
v1 v3 v4
v3
2013-8-7
12
图的概念(4)
路径——是顶点的序列V={Vp,Vi1,……Vin,Vq},满足(Vp,Vi1),
2013-8-7 5
本章目录
7.1 图的定义和术语 7.2 图的存储结构
7.2.1 数组表示法 7.2.2 邻接表 ( *7.2.3 十字链表 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4.1 图的连通分量和生成树 7.4.2 最小生成树
*7.2.4 邻接多重表 )
7.3 图的遍历
连通树或无根树
无回路的图称为树或自由树 或无根树
2013-8-7
18
图的概念(8)
有向树:只有一个顶点的入度为0,其余 顶点的入度为1的有向图。
V1 V2
有向树是弱 连通的
V3
V4
2013-8-7
19
自测题
7. 下列关于无向连通图特性的叙述中,正确的是
2013-8-7
29
图的存贮结构:邻接矩阵
若顶点只是编号信息,边上信息只是有无(边),则 数组表示法可以简化为如下的邻接矩阵表示法: typedef int AdjMatrix[MAXNODE][MAXNODE];
*有n个顶点的图G=(V,{R})的邻接矩阵为n阶方阵A,其定 义如下:
1 A[i ][ j ] 0
【北方交通大学 2001 一.24 (2分)】
数据库第7章数据库设计 ppt课件

数据流图和判定处表(判理定树)、数据字
典中处理过程的描述
系统说明书包括: ①新系统要求、 方案和概图 ②反映新系统信息 流的数据流图
系统结构图 (模块结构)
模块设计 IPO表
IPO表…… 输入: 输出: 处理:
程序编码、 编译联结、 测试
Main( ) …… if…… then …… end
数据分析 概念模型设计 逻辑数据库设计 物理数据库设计 子模式设计 建立数据库
现实世界
功能分析
功能模型
功能说明
事务设计
程序说明
应用程序设计
程序编码调试
7.1.3 数据库设计方法简述
❖ 手工试凑法
设计质量与设计人员的经验和水平有直接关系
缺乏科学理论和工程方法的支持,工程的质量难 以保证
数据库运行一段时间后常常又不同程度地发现各 种问题,增加了维护代价
需求分析是设计数据库的起点 需求分析的结果是否准确地反映了用户的实
际要求,将直接影响到后面各个阶段的设计, 并影响到设计结果是否合理和实用
7.2.1 需求分析的任务
一、需求分析的任务 二、需求分析的重点 三、需求分析的难点
一、需求分析的任务
❖ 通过详细调查现实世界要处理的对象(组织、 部门、企业等),充分了解原系统(手工系 统或计算机系统)工作概况,明确用户的各 种需求
❖然后根据用户处理的要求、安全性的考虑, 在基本表的基础上再建立必要的视图 (View),形成数据的外模式
物理设计阶段 ❖根据DBMS特点和处理的需要,进行物理 存储安排,建立索引,形成数据库内模式
7.2 需求分析
7.2.1 需求分析的任务 7.2.2 需求分析的方法 7.2.3 数据字典
数据结构课后习题答案第七章

第七章图(参考答案)7.1(1)邻接矩阵中非零元素的个数的一半为无向图的边数;(2)A[i][j]= =0为顶点,I 和j无边,否则j和j有边相通;(3)任一顶点I的度是第I行非0元素的个数。
7.2(1)任一顶点间均有通路,故是强连通;(2)简单路径V4 V3 V1 V2;(3)0 1 ∞ 1∞ 0 1 ∞1 ∞ 0 ∞∞∞ 1 0邻接矩阵邻接表(2)从顶点4开始的DFS序列:V5,V3,V4,V6,V2,V1(3)从顶点4开始的BFS序列:V4,V5,V3,V6,V1,V27.4(1)①adjlisttp g; vtxptr i,j; //全程变量② void dfs(vtxptr x)//从顶点x开始深度优先遍历图g。
在遍历中若发现顶点j,则说明顶点i和j间有路径。
{ visited[x]=1; //置访问标记if (y= =j){ found=1;exit(0);}//有通路,退出else { p=g[x].firstarc;//找x的第一邻接点while (p!=null){ k=p->adjvex;if (!visited[k])dfs(k);p=p->nextarc;//下一邻接点}}③ void connect_DFS (adjlisttp g)//基于图的深度优先遍历策略,本算法判断一邻接表为存储结构的图g种,是否存在顶点i //到顶点j的路径。
设 1<=i ,j<=n,i<>j.{ visited[1..n]=0;found=0;scanf (&i,&j);dfs (i);if (found) printf (” 顶点”,i,”和顶点”,j,”有路径”);else printf (” 顶点”,i,”和顶点”,j,”无路径”);}// void connect_DFS(2)宽度优先遍历全程变量,调用函数与(1)相同,下面仅写宽度优先遍历部分。
北京理工大学数据结构图课件

B C D
第 5 页
E
7.1 图的定义与术语
3、无向图——无向图G是由两个集合V(G)和 E(G)组成的。 其中:V(G)是顶点的非空有限集。 E(G)是边的有限集合,边是顶点的 无序对,记为 (v,w) 或 (w,v),并且 (v,w)=(w,v)。
第 6 页
7.1 图的定义与术语
例如:
G2 = <V2,E2> V2 = { v0 ,v1,v2,v3,v4 } E2 = { (v0,v1), (v0,v3), (v1,v2), (v1,v4), (v2,v3), (v2,v4) }
V5
第 15 页
7.1 图的定义与术语
非 连 通 图
V0
V1
V2
V3
V0
V1 V3
V2
强连通分量
第 16 页
7.1 图的定义与术语
7、生成树
包含无向图 G 所有顶点的极小连通子图称为G生 成树。 极小连通子图意思是:该子图是G的连通子图, 在该子图中删除任何一条边,子图不再连通。
V0 V2 V3 V4 V3 连通图G1 V1 V0 V1 连通 所有顶点 V4 无回路
第 22 页
7.2 图的存储结构 3、有向图的逆邻接表 顶点:用一维数组存储(按编号顺序) 以同一顶点为终点的弧:用线性链表存储。
vexdata V0 V1 0 1 v0 v1 v2
v3
firstarc 3 0 0 ^ ^
V2
V3
2 3
^
^
2
章 类似于有向图的邻接表,所不同的是: 以同一顶点为终点弧:用线性链表存储
Boolean visited[MAX]; // 访问标志数组
数据结构习题与答案图

第7章图一、单选题01、在一个图中,所有顶点的度数之和等于图的边数的倍。
A.1/2 B.1C.2D.402、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。
A.1/2B.1 C.2 D.403、有8个结点的无向图最多有条边。
A.14 B.28 C.56 D.11204、有8个结点的无向连通图最少有条边。
A.5 B.6 C.7 D.805、有8个结点的有向完全图有条边。
A.14 B.28 C.56 D.11206、用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。
A.栈 B.队列 C.树 D.图07、用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。
A.栈 B.队列 C.树 D.图08、一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为。
A.O(n)B.O(e)C.O(n+e)D.O(n2)09、已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是。
A.0 2 4 3 1 5 6 B.0 1 3 6 5 4 2C.0 1 3 4 2 5 6 D.0 3 6 1 5 4 210、已知图的邻接矩阵同上题,根据算法,则从顶点0出发,按广度优先遍历的结点序列是。
A.0 2 4 3 6 5 1 B.0 1 2 3 4 5 6C.0 4 2 3 1 5 6 D.0 1 3 4 2 5 611、已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是。
A.0 1 3 2 B.0 2 3 1 C.0 3 2 1 D.0 1 2 3 12、已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是。
A.0 3 2 1 B.0 1 2 3 C.0 1 3 2 D.0 3 1 2 13、图的深度优先遍历类似于二叉树的。
A.先序遍历 B.中序遍历 C.后序遍历 D.层次遍历14、图的广度优先遍历类似于二叉树的。
数据结构第七章课后习题答案 (1)

7_1对于图题7.1(P235)的无向图,给出:(1)表示该图的邻接矩阵。
(2)表示该图的邻接表。
(3)图中每个顶点的度。
解:(1)邻接矩阵:0111000100110010010101110111010100100110010001110(2)邻接表:1:2----3----4----NULL;2: 1----4----5----NULL;3: 1----4----6----NULL;4: 1----2----3----5----6----7----NULL;5: 2----4----7----NULL;6: 3----4----7----NULL;7: 4----5----6----NULL;(3)图中每个顶点的度分别为:3,3,3,6,3,3,3。
7_2对于图题7.1的无向图,给出:(1)从顶点1出发,按深度优先搜索法遍历图时所得到的顶点序(2)从顶点1出发,按广度优先法搜索法遍历图时所得到的顶点序列。
(1)DFS法:存储结构:本题采用邻接表作为图的存储结构,邻接表中的各个链表的结点形式由类型L_NODE规定,而各个链表的头指针存放在数组head中。
数组e中的元素e[0],e[1],…..,e[m-1]给出图中的m条边,e中结点形式由类型E_NODE规定。
visit[i]数组用来表示顶点i是否被访问过。
遍历前置visit各元素为0,若顶点i被访问过,则置visit[i]为1.算法分析:首先访问出发顶点v.接着,选择一个与v相邻接且未被访问过的的顶点w访问之,再从w 开始进行深度优先搜索。
每当到达一个其所有相邻接的顶点都被访问过的顶点,就从最后访问的顶点开始,依次退回到尚有邻接顶点未曾访问过的顶点u,并从u开始进行深度优先搜索。
这个过程进行到所有顶点都被访问过,或从任何一个已访问过的顶点出发,再也无法到达未曾访问过的顶点,则搜索过程就结束。
另一方面,先建立一个相应的具有n个顶点,m条边的无向图的邻接表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
R = { VR } VR = { <v, w> | v, w∈V 且 P(v, w) } 谓词 P(v, w) 定义了 <v, w>之间关系的意义或信息。
可编辑版
2
7.2 图的存储表示
一、图的数组(邻接矩阵)存储表示
二、图的邻接表存储表示
三、有向图的十字链表存储表示
四、无向图的邻接多重表存储表示
第七章 图
7.1 图的类型定义
7.2 图的存储结构 7.3 图的遍历
7.4 最小生成树
7.5 有向无环图及其应用
7.6 最短路径
可编辑版
1
7.1 图的类型定义
图 是由一个顶点集 V 和一个关系集 R构成的数据结构。
Graph = ( V , R )
其中: V = { ei | ei∈ElemSet, i = 1, 2, … , n }
可编辑版
11
二、邻接表
➢邻接表是图(包括有向图和无向图)的链式存储结 构。
➢对于图中的每个顶点vi,把所有邻接于vi的各个顶点 链成一个单链表,称为边链表。
无向图中顶点vi的边链表中每个结点都对应一个与 vi关联的边;
有向图中顶点vi的边链表中每个结点都对应一个以 vi为始顶点的弧,因此称为出边表。
可编辑版
7
有向图邻接矩阵表示法特点:
➢有向图邻接矩阵不一定是对称矩阵;
➢有向图的弧数是矩阵中1的个数。
➢顶点v的出度:等于二维数组对应行中1的个数;
➢顶点v的入度:等于二维数组对应列中1的个数;
➢有向图的总弧数为非0元素个数。
网的邻接矩阵:
A[i][j]=
15
wij Vi邻接Vj,权值是Wij (0≤i,j≤n-1)
可编辑版
12
➢为每个顶点vi的边链表建立一个头结点,存储在一维 数组中(即顶点表),以便随机访问任一顶点的边链表。 ➢因此,在邻接表中有两种结点:
链表结点 和 顶点结点
➢邻接表是一种顺序+ 链式存储结构。用顺序表存放顶 点,为每个顶点建立一个单链表,单链表中的结点表 示依附于该顶点的边或以该顶点为尾的弧。
0 Vi与Vj不邻接
可编辑版
4
V1
V2
V1
V2
V3
V4
V3
V4
V5
v1 v2 v3 v4
v1 0 1 1 0
v2 0 0 0 0 v3 0 0 0 1 v4 1 0 0 0
01010 10 1 0 1 20 1 0 1
1 30 1 0 0
有向图G1 的邻接矩阵
无向图4 G002 1的邻1 接0矩阵
➢设图的顶点数为 n ,存储图用一维数组, 数组元素有m
(m>=n)个,则G占用存储空间:m+n2;G占用存储空间
只与它的顶点数有关,与边数无关;适用于边稠密的图;
可编辑版
6
无向图的邻接矩阵为对称矩阵。
B A
F
C D
E
010010 100011 000101 001001 110000 011100
可编辑版
3
一、邻接矩阵
➢ 在存储图的结构时,至少要保存两类信息:
顶点的数据
顶点之间的关系
➢间的关系(弧), 表示弧的矩阵被称为邻接矩阵(二维数组)。
➢ 具有n个顶点的图G的邻接矩阵是具有如下性质的n
阶矩阵:
A[i][j]= 1 Vi邻接Vj (0≤i,j≤n-1)
//{有向图,有向网,无向图,无向网}
typedef struct ArcCell { //存储弧/边的信息,即邻接矩阵 VRType adj; // VRType是顶点关系类型。 //对无权图,用1或0表示相邻否; // 对带权图,则为权值类型。 InfoType *info; // 该弧相关信息的指针 } ArcCell, AdjMatrix[MAX_VERTEX可编_N辑版UM][MAX_VERTEX_NUM9];
➢图的数组存储表示
typedef struct { //存储数据元素信息 VertexType vexs[MAX_VERTEX_NUM]; // 存储数据元素信息,即顶点向量 AdjMatrix arcs; // 邻接矩阵 int vexnum, arcnum; // 图的当前顶点数和弧(边)数 GraphKind kind; // 图的种类标志
可编辑版
5
无向图邻接矩阵表示法特点:
➢无向图邻接矩阵是对称矩阵,同一条边表示了两次,无 向图的总边数为非0元素个数的一半;
➢顶点v的度:等于二维数组对应行(或列)中1的个数;
➢判断两顶点v、u是否为邻接点:只需判断二维数组对应 分量是否为1;
➢顶点不变,在图中增加、删除边:只需对二维数组对应 分量赋值1或清0;
} MGraph;
可编辑版
10
邻接矩阵的数据类型定义
#define MaxV 100 //定义最大顶点数 typedef struct{
int vexes[MaxV]; //顶点表 int edges[MaxV][MaxV]; //邻接矩阵 int n,e; //顶点数n和边数e }MGraph;
data firstarc 数组元素结点
adjvex nextarc info
链表结点
可编辑版
14
图的邻接表存储表示
#define MAX_VERTEX_NUM 20 typedef struct ArcNode { //边链表结点
int adjvex; // 该弧所指向的顶点的位置 struct ArcNode *nextarc; // 指向下一条弧的指针 InfoType *info; // 该弧相关信息的指针 } ArcNode;
∞
2
Vi与Vj不邻接 ∞ 5 4 6
4
68
A= 5 ∞ ∞ 8
4 ∞∞ 2
32
4
可编辑版
6 8 2∞
8
➢图的数组存储表示
#define INFINITY INT_MAX // 最大值∞ #define MAX_VERTEX_NUM 20 // 最大顶点个数 typedef enum {DG, DN, AG, AN} GraphKind;
可编辑版
13
顶点数据结点(数组元素)由两个域组成:
➢ 数据域(data): 存储顶点名称或其他信息。 ➢ 链域(firstarc): 指向链表中第一个结点 (边)。
边链表的每个结点由3个域组成:
➢ 邻接点域(adjvex):指示与顶点 vi 邻接的顶点 在图中的位置。
➢ 链域(nextarc): 指示下一条边或弧的结点。 ➢ 数据域(info): 存储和边或弧相关的信息。