数据结构-第7章习题答案教学提纲

合集下载

数据结构第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. 图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。

《数据结构(C语言版 第2版)》(严蔚敏 著)第七章练习题答案

《数据结构(C语言版 第2版)》(严蔚敏 著)第七章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第七章练习题答案第7章查找1.选择题(1)对n个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为()。

A.(n-1)/2B.n/2C.(n+1)/2D.n答案:C解释:总查找次数N=1+2+3+…+n=n(n+1)/2,则平均查找长度为N/n=(n+1)/2。

(2)适用于折半查找的表的存储方式及元素排列要求为()。

A.链接方式存储,元素无序B.链接方式存储,元素有序C.顺序方式存储,元素无序D.顺序方式存储,元素有序答案:D解释:折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

(3)如果要求一个线性表既能较快的查找,又能适应动态变化的要求,最好采用()查找法。

A.顺序查找B.折半查找C.分块查找D.哈希查找答案:C解释:分块查找的优点是:在表中插入和删除数据元素时,只要找到该元素对应的块,就可以在该块内进行插入和删除运算。

由于块内是无序的,故插入和删除比较容易,无需进行大量移动。

如果线性表既要快速查找又经常动态变化,则可采用分块查找。

(4)折半查找有序表(4,6,10,12,20,30,50,70,88,100)。

若查找表中元素58,则它将依次与表中()比较大小,查找结果是失败。

A.20,70,30,50B.30,88,70,50C.20,50D.30,88,50答案:A解释:表中共10个元素,第一次取⎣(1+10)/2⎦=5,与第五个元素20比较,58大于20,再取⎣(6+10)/2⎦=8,与第八个元素70比较,依次类推再与30、50比较,最终查找失败。

(5)对22个记录的有序表作折半查找,当查找失败时,至少需要比较()次关键字。

A.3B.4C.5D.6答案:B解释:22个记录的有序表,其折半查找的判定树深度为⎣log222⎦+1=5,且该判定树不是满二叉树,即查找失败时至多比较5次,至少比较4次。

(6)折半搜索与二叉排序树的时间性能()。

数据结构第七章习题答案

数据结构第七章习题答案

第七章图1.下面是一个图的邻接表结构,画出此图,并根据此存储结构和深度优先搜索算法写出从C开始的深度优先搜索序列。

0 A 1 3 ^1 B 3 5 ^2 C3 0 ^3 D4 ^4 E ^5 F 4 ^【解答】A B FC D EC开始的深度优先搜索序列:CDEABF(唯一的结果)2.假定要在某县所辖六个镇(含县城)之间修公路,若镇I和镇J之间有可能通过道路连接,则Wij表示这条路的长度。

要求每个镇都通公路且所修公路总里程最短,那么应选择哪些线路来修。

I11112233445 J23564546566 1239102626474 Wij(1).画出该图。

(2).用C语言描述该图的数组表示法存储结构,并注明你所使用变量的实际含义。

(3).图示你所定义的数据结构。

(4).标识出你选择的线路。

【解答】(1)(2)#define MAX 6 typedef struct {char vexs[MAX]; // 顶点信息int arcs[MAX][MAX]; // 边的信息 int vexnum, arcnum; // 顶点数,边数 } MGraph; (3)略(4){(1,3), (3,4), (2,4), (4,5), (5,6)}3.图G 如下所示。

(1).给出该图的所有强连通分量。

(2).在图中删除弧<2,1>,然后写出从顶点1开始的拓扑有序序列。

【解答】(1) 共4个强连通分量:(2) 1,3,2,6,5,4一、选择题1、有6个结点的有向完全图有()条弧。

A 、36 B 、28 C 、30 D 、152、用邻接表表示图进行广度优先遍历时,通常采用()来实现算法。

5 461 324 1510 215 20 30 410 10A、栈B、队列C、树D、图3、用邻接表表示图进行深度优先遍历时,通常采用()来实现算法。

A、栈B、队列C、树D、图4、任何一个无向连通图的最小生成树()A、只有一棵B、一棵或多棵C、一定有多棵D、可能不存在5、在一个图中,所有顶点的度数之和等于所有边数和的()倍。

【免费下载】数据结构第7章 答案

【免费下载】数据结构第7章 答案
D43、无向图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)n-1 B)n(n-1)/2 C)n(n+1)/2 D)n A33、一个n 个顶点的连通无向图,其边的个数至少为___。
A)n-1 B)n C)n+1 D)nlogn B34、要连通具有n 个顶点的有向图,至少需要___条边。
A)n-l B)n C)n+l D)2n B35、在一个无向图中,所有顶点的度数之和等于所有边数___倍。
A)5 B)6 C)7 D)8 C05、有 8 个结点的有向完全图有 条边。
A)14 B)28 C)56 D)112 B06、用邻接表表示图进行广度优先遍历时,通常是采用 来实现算法的。
A)栈 B)队列 C)树 D)图 A07、用邻接表表示图进行深度优先遍历时,通常是采用 来实现算法的。
A)栈 B)队列 C)树 D)图 A08、一个含 n 个顶点和 e 条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时 间复杂度为 。
A)0 1 3 2 B)0 2 3 1 C)0 3 2 1 D)0 1 2 3 A12、已知图的邻接表如下所示,根据算法,则从顶点 0 出发按广度优先遍历的结点序列是 。
A)0 3 2 1 B)0 1 2 3 C)0 1 3 2 D)0 3 1 2 A13、图的深度优先遍历类似于二叉树的 。
A)先序遍历 B)中序遍历 C)后序遍历 D)层次遍历 D14、图的广度优先遍历类似于二叉树的 。
A)关键路径 B)最短路径的 Dijkstra C)拓扑排序 D)广度优先遍历 A18、若用邻接矩阵表示一个有向图,则其中每一列包含的“1”的个数为 。

数据结构课后习题答案第七章

数据结构课后习题答案第七章

第七章图(参考答案)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)相同,下面仅写宽度优先遍历部分。

数据结构第七章参考答案

数据结构第七章参考答案

习题71.填空题(1)由10000个结点构成的二叉排序树,在等概率查找的条件下,查找成功时的平均查找长度的最大值可能达到(___________)。

答案:5000.5(2)长度为11的有序序列:1,12,13,24,35,36,47,58,59,69,71进行等概率查找,如果采用顺序查找,则平均查找长度为(___________),如果采用二分查找,则平均查找长度为(___________),如果采用哈希查找,哈希表长为15,哈希函数为H(key)=key%13,采用线性探测解决地址冲突,即d i=(H(key)+i)%15,则平均查找长度为(保留1位小数)(___________)。

答案:6,3,1.6(3)在折半查找中,查找终止的条件为(___________)。

答案:找到匹配元素或者low>high?(4)某索引顺序表共有元素275个,平均分成5块。

若先对索引表采用顺序查找,再对块元素进行顺序查找,则等概率情况下,分块查找成功的平均查找长度是(___________)。

答案:31(5)高度为8的平衡二叉树的结点数至少是(___________)。

答案: 54 计算公式:F(n)=F(n-1)+F(n-2)+1(6)对于这个序列{25,43,62,31,48,56},采用的散列函数为H(k)=k%7,则元素48的同义词是(___________)。

答案:62(7)在各种查找方法中,平均查找长度与结点个数无关的查找方法是(___________)。

答案:散列查找(8)一个按元素值排好的顺序表(长度大于2),分别用顺序查找和折半查找与给定值相等的元素,平均比较次数分别是s和b,在查找成功的情况下,s和b的关系是(___________);在查找不成功的情况下,s和b的关系是(___________)。

答案:(1)(2s-1)b=2s([log2(2s-1)]+1)-2[log2(2s-1)]+1+1(2)分两种情况考虑,见解答。

数据结构第七章的习题答案

数据结构第七章的习题答案

数据结构第七章的习题答案数据结构第七章的习题答案数据结构是计算机科学中非常重要的一门学科,它研究如何组织和管理数据以便高效地访问和操作。

第七章是数据结构课程中的一个关键章节,它涵盖了树和二叉树这两个重要的数据结构。

本文将为读者提供第七章习题的详细解答,帮助读者更好地理解和掌握这些概念。

1. 问题:给定一个二叉树,如何判断它是否是二叉搜索树?解答:要判断一个二叉树是否是二叉搜索树,我们可以使用中序遍历的方法。

中序遍历会按照从小到大的顺序访问二叉树中的节点。

所以,如果一个二叉树是二叉搜索树,那么它的中序遍历结果应该是一个有序的序列。

具体实现时,我们可以使用递归或者迭代的方式进行中序遍历,并将遍历的结果保存在一个数组中。

然后,我们检查这个数组是否是有序的即可判断二叉树是否是二叉搜索树。

2. 问题:给定一个二叉树,如何找到它的最大深度?解答:要找到一个二叉树的最大深度,我们可以使用递归的方式。

对于每个节点,它的最大深度等于其左子树和右子树中的最大深度加1。

递归的终止条件是节点为空,此时深度为0。

具体实现时,我们可以定义一个递归函数,该函数接收一个节点作为参数,并返回以该节点为根节点的子树的最大深度。

在递归函数中,我们先判断节点是否为空,如果为空则返回0;否则,我们分别计算左子树和右子树的最大深度,然后取两者中的较大值加1作为当前节点的最大深度。

3. 问题:给定一个二叉树,如何判断它是否是平衡二叉树?解答:要判断一个二叉树是否是平衡二叉树,我们可以使用递归的方式。

对于每个节点,我们分别计算其左子树和右子树的高度差,如果高度差大于1,则该二叉树不是平衡二叉树。

具体实现时,我们可以定义一个递归函数,该函数接收一个节点作为参数,并返回以该节点为根节点的子树的高度。

在递归函数中,我们先判断节点是否为空,如果为空则返回0;否则,我们分别计算左子树和右子树的高度,然后取两者中的较大值加1作为当前节点的高度。

最后,我们判断左子树和右子树的高度差是否大于1,如果大于1,则该二叉树不是平衡二叉树。

数据结构习题及答案与实验指导(树和森林)7

数据结构习题及答案与实验指导(树和森林)7

第7章树和森林树形结构是一类重要的非线性结构。

树形结构的特点是结点之间具有层次关系。

本章介绍树的定义、存储结构、树的遍历方法、树和森林与二叉树之间的转换以及树的应用等内容。

重点提示:●树的存储结构●树的遍历●树和森林与二叉树之间的转换7-1 重点难点指导7-1-1 相关术语1.树的定义:树是n(n>=0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:①有且仅有一个特定的称为根的结点;②其余的结点可分为m(m>=0)个互不相交的子集T1,T2,…,T m,其中每个子集本身又是一棵树,并称为根的子树。

要点:树是一种递归的数据结构。

2.结点的度:一个结点拥有的子树数称为该结点的度。

3.树的度:一棵树的度指该树中结点的最大度数。

如图7-1所示的树为3度树。

4.分支结点:度大于0的结点为分支结点或非终端结点。

如结点a、b、c、d。

5.叶子结点:度为0的结点为叶子结点或终端结点。

如e、f、g、h、i。

6.结点的层数:树是一种层次结构,根结点为第一层,根结点的孩子结点为第二层,…依次类推,可得到每一结点的层次。

7.兄弟结点:具有同一父亲的结点为兄弟结点。

如b、c、d;e、f;h、i。

8.树的深度:树中结点的最大层数称为树的深度或高度。

9.有序树:若将树中每个结点的子树看成从左到右有次序的(即不能互换),则称该树为有序树,否则称为无序树。

10.森林:是m棵互不相交的树的集合。

7-1-2 树的存储结构1.双亲链表表示法以图7-1所示的树为例。

(1)存储思想:因为树中每个元素的双亲是惟一的,因此对每个元素,将其值和一个指向双亲的指针parent构成一个元素的结点,再将这些结点存储在向量中。

(2)存储示意图:-1 data:parent:(3)注意: Parrent域存储其双亲结点的存储下标,而不是存放结点值。

下面的存储是不正确的:-1 data:parent:2.孩子链表表示法(1)存储思想:将每个数据元素的孩子拉成一个链表,链表的头指针与该元素的值存储为一个结点,树中各结点顺序存储起来,一般根结点的存储号为0。

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

数据结构-第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 2 34 6 5( D )10. 已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是( A )11. 已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是( A )12. 深度优先遍历类似于二叉树的A .先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历A .0 2 4 3 1 5 6 B. 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 3 C. 0 1 3 2 D. 0 3 1 2(D)13. 广度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(A)14. 任何一个无向连通图的最小生成树A.只有一棵 B. 一棵或多棵 C. 一定有多棵 D. 可能不存在(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)二、填空题(每空1分,共20分)1. 图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。

2. 有向图G用邻接表矩阵存储,其第i行的所有元素之和等于顶点i的出度。

3. 如果n个顶点的图是一个环,则它有n 棵生成树。

(以任意一顶点为起点,得到n-1条边)4. n个顶点e条边的图,若采用邻接矩阵存储,则空间复杂度为O(n2) 。

5. n个顶点e条边的图,若采用邻接表存储,则空间复杂度为 O(n+e) 。

6. 设有一稀疏图G,则G采用邻接表存储较省空间。

7. 设有一稠密图G,则G采用邻接矩阵存储较省空间。

8. 图的逆邻接表存储结构只适用于有向图。

9. 已知一个图的邻接矩阵表示,删除所有从第i10. 图的深度优先遍历序列不是惟一的。

11. n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为O(n2) ;若采用邻接表存储时,该算法的时间复杂度为O(n+e) 。

12. n个顶点e条边的图采用邻接矩阵存储,广度优先遍历算法的时间复杂度为 O(n2) ;若采用邻接表存储,该算法的时间复杂度为O(n+e) 。

13. 图的BFS生成树的树高比DFS14. 用普里姆(Prim)算法求具有n个顶点e条边的图的最小生成树的时间复杂度为O(n2) ;用克鲁斯卡尔(Kruskal)算法的时间复杂度是O(elog2e) 。

15. 若要求一个稀疏图G的最小生成树,最好用克鲁斯卡尔(Kruskal) 算法来求解。

16. 若要求一个稠密图G的最小生成树,最好用普里姆(Prim)算法来求解。

17. 用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度递增的次序来得到最短路径的。

18. 拓扑排序算法是通过重复选择具有0 个前驱顶点的过程来完成的。

三、简答题(每题6分,共24分)1. 【严题集7.1①】已知如图所示的有向图,请给出该图的:(1) 每个顶点的入/出度;(2) 邻接矩阵; (3) 邻接表; (4) 逆邻接表。

答案:顶点12 3 4 5 6 入度 出度2. 【严题集7.7②】请对下图的无向带权图:(1) 写出它的邻接矩阵,并按普里姆算法求其最小生成树;(2) 写出它的邻接表,并按克鲁斯卡尔算法求其最小生成树。

解:设起点为a 。

可以直接由原始图画出最小生成树,而且最小生成树只有一种(类)! 邻接矩阵为:PRIM 算法(横向变化): Vb c d e f g h U V-U Vexlowcos ta 4 a 3 a ∞ a ∞ a ∞ a ∞ a ∞ {a} {b,c,d,e,f,g,h} Vexlowcos ta 4 0 c 5 a ∞ a ∞ a ∞ c 5 {a,c} {b,d,e,f,g,h} Vexlowcos t0 0 c 5 b 9 a ∞ a ∞ c 5 {a,c,b}{d,e,f,g,h}Vexlowcos t0 0 0 d 7 d 6 d 5 d4 {a,c,b,d } {e,f,g,h} Vexlowcos t0 0 0 d 7 d 6 d 5 0{a,c,b,d ,h } {e,f,g } Vexlowcos t0 0 0 d 7 g 2 0 0{a,c,b,d ,h ,g} { f,e } Vexlowcos0 0 f30 0 0{a,c,b,d ,h ,g, f }{e }⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞064560252036307945670555505395504340最小生成树Vex lowcos t 0 0 0 0 0 0 0 {a,c,b,d ,h ,g, f, e }{ }邻接表为:a →b 4 →c 3b → a 4 →c 5 →d 5 →e 9 ^c → a 3 → b 5 →d 5 →h 5 ^d → b 5 → c 5 →e 7 →f 6 →g 5 →h 4^e → b 9 → d 7 →f 3 ^f → d 6 → e 3 →g 2 ^g → d 5 → f 2 →h 6 ^h → c 5 → d 4 →g 6 ^先罗列:f---2---g a—3--c f—3—e a—4---b d—4—h(a,b,c) (e,f,g) (d,h) 取b—5—d, g—5--d 就把三个连通分量连接起来了。

3.【严题集7.5②】已知二维数组表示的图的邻接矩阵如下图所示。

试分别画出自顶点1出发进行遍历所得的深度优先生成树和广度优先生成树。

克鲁斯卡尔算法步4. 【严题集7.11②】试利用Dijkstra算法求图中从顶点a到其他各顶点间的最短路径,写出执行算法过程中各步的状态。

解:最短路径为:(a,c,f,e,d,g,b)四、 【2001年计考研题】给定下列网G: (10分)1 试着找出网G 的最小生成树,画出其逻辑结构图;2 用两种不同的表示法画出网G 的存储结构图;3 用C 语言(或其他算法语言)定义其中一种表示法(存储结构)的数据类型。

解:1. 最小生成树可直接画出,如右图所示。

2. 可用邻接矩阵和邻接表来描述:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞1012696841015121520982012412邻接表为: a → b 12 → e 4 ^ b → a 12 → c 20 → e 8 → f 9 ^ c → b 20 → d 15 → g 12 ^ d → c 15 →g 10 ^ e → a 4 → b 8 → f 6 ^ f → b 9 → e 6 ^ g →c 12→ d 10五、算法设计题(每题10分,共30分)A B ———————CE ————FG ————D描述存储结构的数据类型可参见教材或电子教案:注:用两个数组分别存储顶点表和邻接矩阵 #define INFINITY INT_MAX //最大值∞#define MAX_VERTEX_NUM 20 //假设的最大顶点数(可取为7) Typedef enum {DG, DN, AG,AN } GraphKind; //有向/无向图,有向/无向网Typedef struct ArcCell{ //弧(边)结点的定义VRType adj; //顶点间关系,无权图取1或0;有权图取权值类型 InfoType *info; //该弧相关信息的指针}ArcCell, AdjMatrix [ MAX_VERTEX_NUM ] [MAX_VERTEX_NUM ]; Typedef struct{ //图的定义VertexType vexs [MAX_VERTEX_NUM ] ; //顶点表,用一维向量即可AdjMatrix arcs; //邻接矩阵1. 【严题集7.14③】编写算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信息建立有向图的邻接表。

解:Status Build_AdjList(ALGraph &G) //输入有向图的顶点数,边数,顶点信息和边的信息建立邻接表{InitALGraph(G);scanf("%d",&v);if(v<0) return ERROR; //顶点数不能为负G.vexnum=v;scanf("%d",&a);if(a<0) return ERROR; //边数不能为负G.arcnum=a;for(m=0;m<v;m++)G.vertices[m].data=getchar(); //输入各顶点的符号for(m=1;m<=a;m++){t=getchar();h=getchar(); //t为弧尾,h为弧头if((i=LocateVex(G,t))<0) return ERROR;if((j=LocateVex(G,h))<0) return ERROR; //顶点未找到p=(ArcNode*)malloc(sizeof(ArcNode));if(!G.vertices.[i].firstarc) G.vertices[i].firstarc=p;else{for(q=G.vertices[i].firstarc;q->nextarc;q=q->nextarc);q->nextarc=p;}p->adjvex=j;p->nextarc=NULL;}//whilereturn OK;}//Build_AdjList2. 【严题集7.15③】试在邻接矩阵存储结构上实现图的基本操作:DeleteArc(G,v,w) ,即删除一条边的操作。

相关文档
最新文档