数据结构第7章图(1)

合集下载

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

数据结构章节练习题-答案第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章 图-有向无环图

第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章图_数据结构

第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课件

数据库第7章数据库设计 ppt课件
分区1 分区2
数据流图和判定处表(判理定树)、数据字
典中处理过程的描述
系统说明书包括: ①新系统要求、 方案和概图 ②反映新系统信息 流的数据流图
系统结构图 (模块结构)
模块设计 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)相同,下面仅写宽度优先遍历部分。

北京理工大学数据结构图课件

北京理工大学数据结构图课件
A
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)

数据结构第七章课后习题答案 (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条边的无向图的邻接表。

数据结构(C语言版)_第7章 图及其应用

数据结构(C语言版)_第7章 图及其应用
(1)创建有向图邻接表 (2)创建无向图的邻接表
实现代码详见教材P208
7.4 图的遍历
图的遍历是对具有图状结构的数据线性化的过程。从图中任 一顶点出发,访问输出图中各个顶点,并且使每个顶点仅被访 问一次,这样得到顶点的一个线性序列,这一过程叫做图的遍 历。
图的遍历是个很重要的算法,图的连通性和拓扑排序等算法 都是以图的遍历算法为基础的。
V1
V1
V2
V3
V2
V3
V4
V4
V5
图9.1(a)

图7-2 图的逻辑结构示意图
7.2.2 图的相关术语
1.有向图与无向图 2.完全图 (1)有向完全图 (2)无向完全图 3.顶点的度 4.路径、路径长度、回路、简单路径 5.子图 6.连通、连通图、连通分量 7.边的权和网 8.生成树
2. while(U≠V) { (u,v)=min(wuv;u∈U,v∈V-U); U=U+{v}; T=T+{(u,v)}; }
3.结束
7.5.1 普里姆(prim)算法
【例7-10】采用Prim方法从顶点v1出发构造图7-11中网所对 应的最小生成树。
构造过程如图7-12所示。
16
V1
V1
V2
7.4.2 广度优先遍历
【例7-9】对于图7-10所示的有向图G4,写出从顶点A出发 进行广度优先遍历的过程。
访问过程如下:首先访问起始顶点A,再访问与A相邻的未被 访问过的顶点E、F,再依次访问与E、F相邻未被访问过的顶 点D、C,最后访问与D相邻的未被访问过的顶点B。由此得到 的搜索序列AEFDCB。此时所有顶点均已访问过, 遍历过程结束。
【例7-1】有向图G1的逻辑结构为:G1=(V1,E1) V1={v1,v2,v3,v4},E1={<v1,v2>,<v2,v3>,<v2,v4>,<v3,v4>,<v4,v1>,<v4,v3>}

数据结构-第7章图答案

数据结构-第7章图答案

7.3 图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点, 并且使图中的每个顶点仅被访问一次的过程。 一、深度优先搜索 从图中某个顶点V0 出发,访问此顶点,然后依次 从V0的各个未被访问的邻接点出发深度优先搜索遍 历图,直至图中所有和V0有路径相通的顶点都被访 问到,若此时图中尚有顶点未被访问,则另选图中 一个未曾被访问的顶点作起始点,重复上述过程, 直至图中所有顶点都被访问到为止。
void BFSTraverse(Graph G, Status (*Visit)(int v)) { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组 visited。 for (v=0; v<G.vexnum; ++v) visited[v] = FALSE; InitQueue(Q); // 置空的辅助队列Q for ( v=0; v<G.vexnum; ++v ) if ( !visited[v]) { // v尚未访问 EnQueue(Q, v); // v入队列 while (!QueueEmpty(Q)) { DeQueue(Q, u); // 队头元素出队并置为u visited[u] = TRUE; Visit(u); // 访问u for ( w=FirstAdjVex(G, u); w!=0; w=NextAdjVex(G, u, w) ) if ( ! visited[w]) EnQueue(Q, w); // u的尚未访问的邻接顶点w入队列Q
4。邻接多重表
边结点
mark ivex
顶点结点
ilink
jvex
jlink
info
data
firstedge
#define MAX_VERTEX_NUM 20 typedef emnu {unvisited, visited} VisitIf; typedef struct Ebox { VisitIf mark; // 访问标记 int ivex, jvex; // 该边依附的两个顶点的位置 struct EBox *ilink, *jlink; // 分别指向依附这两个顶点的下一条 边 InfoType *info; // 该边信息指针 } EBox; typedef struct VexBox { VertexType data; EBox *firstedge; // 指向第一条依附该顶点的边 } VexBox; typedef struct { VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum, edgenum; // 无向图的当前顶点数和边数 } AMLGraph;

数据结构第七章--图(严蔚敏版)

数据结构第七章--图(严蔚敏版)
9个顶点 个顶点
8个顶点的无向图最多有 条边且该图为连通图 个顶点的无向图最多有28条边且该图为连通图 个顶点的无向图最多有 连通无向图构成条件:边 顶点数 顶点数-1)/2 顶点数*(顶点数 连通无向图构成条件 边=顶点数 顶点数 顶点数>=1,所以该函数存在单调递增的单值反 顶点数 所以该函数存在单调递增的单值反 函数,所以边与顶点为增函数关系 所以28个条边 函数 所以边与顶点为增函数关系 所以 个条边 的连通无向图顶点数最少为8个 所以28条边的 的连通无向图顶点数最少为 个 所以 条边的 非连通无向图为9个 加入一个孤立点 加入一个孤立点) 非连通无向图为 个(加入一个孤立点
28
无向图的邻接矩阵为对称矩阵
2011-10-13
7.2
图的存储结构
Wij 若< vi,vj > 或<vj,v i > ∈E(G)
若G是网(有权图),邻接矩阵定义为 是网(有权图), ),邻接矩阵定义为
A [ i,j ] = , 0或 ∞
如图: 如图:
V1
若其它
V2
3 4
2
V3
2011-10-13
C
A
B
D 2011-10-13 (a )
3
Königsberg七桥问题
• Königsberg七桥问题就是说,能否从某点出发 通过每桥恰好一次回到原地?
C
C
A B

A D
B
D (a)
2011-10-13
(b)
4
第七章 图
7.1 图的定义 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用 7.6 最短路径
2011-10-13

第7章 图

第7章 图

假设一个连通图有 n 个顶点和 e 条边, 其中 n-1 条边和 n 个顶点构成一个极小 连通子图,称该极小连通子图为此连通图 的生成树 生成树。 生成树 B A F E C D 对非连通图,则 称由各个连通分 量的生成树的集 合为此非连通图 的生成森林 生成森林。 生成森林
基本操作
结构的建立和销毁 对顶点的访问操作 插入和删除顶点 插入和删除弧 对邻接点的操作 遍历
假若顶点v 和顶点w 之间存在一条边, 则称顶点v 和w 互为邻接点 邻接点, 邻接点
边(v,w) 和顶点v 和w 相关联 相关联。 和顶点v相关联的边的数目 边的数目定义为顶点v的度, 边的数目 度 记为TD(v)。 记为TD( TD
B A F
C D E
例如: 例如: 右侧图中 TD(B) = 3 TD(A) = 2
个顶点相同的路径。
若图G中任意两个顶 点之间都有路径相通, 则称此图为连通图 连通图; A 连通图 B A F E C D
B
C D
F
E
若无向图为非连通图, 则图中各个极大连通 子图称作此图的连通 连通 分量。 分量
若任意两个顶点之间都存在 对有向图, 对有向图, 一条有向路径,则称此有向图为强连通图 强连通图。 强连通图 否则,其各个强连通子图称作它的 强连通分量。 强连通分量 A B C F E B C F A E
// 点”。若 w 是 v 的最后一个邻接点,则 // 返回“空”。
插入和删除顶点
InsertVex(&G, v); //在图G中增添新顶点v。 DeleteVex(&G, v); // 删除G中顶点v及其相关的弧。
插入和删除弧
InsertArc(&G, v, w); // 在G中增添弧<v,w>,若G是无向的, //则还增添对称弧<w,v>。 DeleteArc(&G, v, w); //在G中删除弧<v,w>,若G是无向的, //则还删除对称弧<w,v>。

第7章图(Graphs)

第7章图(Graphs)

7.1 图的概念及术语
v1 v3 有向边<v3, v4> V3:始点, v4: 终点 v2 v4
图的构成: • 结点集:V={v1,v2,v3,v4}, • 有向边集:E={<v1,v3>,<v1,v2>,<v3,v4>,<v4,v1>}
7.1 图的概念及术语
v1 v3 v2 v4 v1 v2
v3
为从顶点vi 到顶点 vj 的路径。 • 路径长度 –非带权图的路径长度是指此路径上的边数。 –带权图的路径长度是指路径上各边的权之和
7.1 图的概念及术语
• 简单路径 若路径上各顶点 v1,v2,...,vm 均不互相重 复, 则称这样的路径为简单路径。 • 回路 若路径上第一个顶点 v1 与最后一个顶点vm 重合, 则称这样的路径为回路或环。 • 连通图与连通分量 在无向图中, 若从顶点v1到顶 点v2有路径, 则称顶点v1与v2是连通的。 • 如果图中任意一对顶点都是连通的, 则称此图是连 通图。 • 非连通图的极大连通子图叫做连通分量.
7.1 图的概念及术语
v1
v2
v4Βιβλιοθήκη v3路径: (1) <v1, v3>, <v3, v4> (简单路径)
(2) <v1, v3>, <v3, v4>, <v4, v1> (环)
(3) <v3, v4>
7.1 图的概念及术语
• 路径: 在图 G=(V, E) 中, 若存在边的序列 (vi, vp1)、(vp1, vp2)、...、(vpm, vj) 则称顶点序列 ( vi vp1 vp2 ... vpm vj )
v4 v5

数据结构 C语言版(严蔚敏版)第7章 图

数据结构 C语言版(严蔚敏版)第7章 图
data Fout
1
2
4
1
e6 2 4
2016/11/7
29
7.3 图的遍历



从已给的连通图中某一顶点出发,沿着一 些边访遍图中所有的顶点,且使每个顶点 仅被访问一次,就叫做图的遍历 ( Graph Traversal )。 图中可能存在回路,且图的任一顶点都可 能与其它顶点相通,在访问完某个顶点之 后可能会沿着某些边又回到了曾经访问过 的顶点。 为了避免重复访问,可设置一个标志顶点 是否被访问过的辅助数组 visited [ ]。
2
1 2
V2
V4
17
结论:



无向图的邻接矩阵是对称的; 有向图的邻接矩阵可能是不对称的。 在有向图中, 统计第 i 行 1 的个数可得顶点 i 的出度,统计第 j 行 1 的个数可得顶点 j 的入度。 在无向图中, 统计第 i 行 (列) 1 的个数可得 顶点i 的度。
2016/11/7

18

2
邻接表 (出度表)
adjvex nextarc
data firstarc
0 A 1 B 2 C
2016/11/7
1 0 1
逆邻接表 (入度表)
21

网络 (带权图) 的邻接表
6 9 0 2 1 C 2 8 3 D
data firstarc Adjvex info nextarc
2016/11/7
9



路径长度 非带权图的路径长度是指此路径 上边的条数。带权图的路径长度是指路径 上各边的权之和。 简单路径 若路径上各顶点 v1,v2,...,vm 均不 互相重复, 则称这样的路径为简单路径。 回路 若路径上第一个顶点 v1 与最后一个 顶点vm 重合, 则称这样的路径为回路或环。

图数据结构C语言版

图数据结构C语言版

7.2 图旳存储构造
for(i=0;i<N->vexnum;i++) /*创建一种数组,用于保存网旳各个顶点*/
scanf("%s",N->vertex[i]);
for(i=0;i<N->vexnum;i++) /*初始化邻接矩阵*/
for(j=0;j<N->vexnum;j++)
{
N->arcs[i][j].adj=INFINITY;
{
VertexType vertex[MAXVERTEX]; /*顶点数组*/
AdjMatrix arcs; /*邻接矩阵,存储边或弧旳信息*/
int vexnum,arcnum; /*顶点数和边(弧)旳数目*/
GraphKind kind; /*图旳类型*/
}MGraph;
7.2 图旳存储构造
【例7.1】 采用邻接矩阵创建一种有向网N,如图7.9所 示。
/*将网旳顶点数置为0*/
N->arcnum=0;
/*将网旳弧旳数目置为0*/
}
7.2 图旳存储构造
7.2.2 邻接表表达法 一种图旳邻接表表达由表头结点表和边表两部分构成。 (1) 表头结点表:表头结点采用顺序存储构造实现,这 么能够随机地访问任意顶点。表头结点由两个域构成:数据 域和指针域。其中,数据域用来存储顶点信息,指针域用来 指向边表中旳第一种结点。 (2) 边表:边表由三个域构成:邻接点域、数据域和指 针域。其中,邻接点域表达与相应旳表头顶点邻接点旳位置 ,数据域存储与边或弧旳信息,指针域用来指示下一种边或 弧旳结点。表头结点与边表结点旳存储构造如图7.11所示。

数据结构第7章习题答案

数据结构第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章图

算法与数据结构答案第7章图

第7 章图一、基础知识题7.1设无向图的顶点个数为n,则该图最多有多少条边?【解答】n(n-1)/27.2一个n个顶点的连通无向图,其边的个数至少为多少?【解答】n-17.3要连通具有n个顶点的有向图,至少需要多少条弧?【解答】n7.4 n个顶点的完全有向图含有弧的数目是多少?【解答】n(n-1)7.5一个有n个顶点的无向图,最少有多少个连通分量,最多有多少个连通分量。

【解答】1, n7.6图的BFS生成树的树高要小于等于同图DFS生成树的树高,对吗?【解答】对7.7无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},写出对该图从顶点a出发进行深度优先遍历可能得到的全部顶点序列。

【解答】abedfc, acfdeb, aebdfc, aedfcb7.8 在图采用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度是多少?【解答】O(n+e)7.9若一个具有n个顶点,e条边的无向图是一个森林,则该森林中必有多少棵树?【解答】n-e7.10 n个顶点的无向图的邻接矩阵至少有多少非零元素?【解答】07.11证明:具有n个顶点和多于n-1条边的无向连通图G一定不是树。

【证明】具有n个顶点n-1条边的无向连通图是自由树,即没有确定根结点的树,每个结点均可当根。

若边数多于n-1条,因一条边要连接两个结点,则必因加上这一条边而使两个结点多了一条通路,即形成回路。

形成回路的连通图不再是树。

7.12证明对有向图顶点适当编号,使其邻接矩阵为下三角形且主对角线为全零的充要条件是该图是无环图。

【证明】该有向图顶点编号的规律是让弧尾顶点的编号大于弧头顶点的编号。

由于不允许从某顶点发出并回到自身顶点的弧,所以邻接矩阵主对角元素均为0。

先证明该命题的充分条件。

由于弧尾顶点的编号均大于弧头顶点的编号,在邻接矩阵中,非零元素(A[i][j]=1)自然是落到下三角矩阵中;命题的必要条件是要使上三角为0,则不允许出现弧头顶点编号大于弧尾顶点编号的弧,否则,就必然存在环路。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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): 存储和边或弧相关的信息。
相关文档
最新文档