77范文网 - 专业文章范例文档资料分享平台

数据结构第八章作业提示

来源:网络收集 时间:2018-12-11 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

第8章 图

第8章 图

8-1 画出1个顶点、2个顶点、3个顶点、4个顶点和5个顶点的无向完全图。试证明在n个顶点的无向完全图中,边的条数为n(n-1)/2。 【解答】 【证明】

1个顶点的 无向完全图

2个顶点的 无向完全图

3个顶点的 无向完全图 4个顶点的 无向完全图

5个顶点的 无向完全图

在有n个顶点的无向完全图中,每一个顶点都有一条边与其它某一顶点相连,所以每一个顶点有n-1

条边与其他n-1个顶点相连,总计n个顶点有n(n-1)条边。但在无向图中,顶点i到顶点j与顶点j到顶点i是同一条边,所以总共有n(n-1)/2条边。

8-2 右边的有向图是强连通的吗?请列出所有的简单路径。 【解答】

判断一个有向图是否强连通,要看从任一顶点出发是否能够回到该顶

B C E F A D 点。右面的有向图做不到这一点,它不是强连通的有向图。各个顶点自成强连通分量。

所谓简单路径是指该路径上没有重复的顶点。

从顶点A出发,到其他的各个顶点的简单路径有A→B,A→D→B,A→B→C,A→D→B→C,A→D,A→B→E,A→D→E,A→D→B→E,A→B→C→F→E,A→D→B→C→F→E,A→B→C→F,A→D→B→C→F。

从顶点B出发,到其他各个顶点的简单路径有B→C,B→C→F,B→E,B→C→F→E。 从顶点C出发,到其他各个顶点的简单路径有C→F,C→F→E。

从顶点D出发,到其他各个顶点的简单路径有D→B,D→B→C,D→B→C→F,D→E,D→B→E,D→B→C→F→E。

从顶点E出发,到其他各个顶点的简单路径无。 从顶点F出发,到其他各个顶点的简单路径有F→E。

8-3 给出右图的邻接矩阵、邻接表和邻接多重表表示。 【解答】

(1) 邻接矩阵

?0?0??0Edge???0?0???01001000100001000000101010?0??1??0?0??0??A B C D E F 96

第8章 图

(2) 邻接表

8-4 用邻接矩阵表示图时,若图中有1000个顶点,1000条边,则形成的邻接矩阵有多少矩阵元素?有多少非零元素?是否稀疏矩阵? 【解答】

一个图中有1000个顶点,其邻接矩阵中的矩阵元素有10002 = 1000000个。它有1000个非零元素(对于有向图)或2000个非零元素(对于无向图),因此是稀疏矩阵。

8-5 用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否相关?与边的条数是否相关? 【解答】

用邻接矩阵表示图,矩阵元素的个数是顶点个数的平方,与边的条数无关。矩阵中非零元素的个数与边的条数有关。

8-6 有n个顶点的无向连通图至少有多少条边?有n个顶点的有向强连通图至少有多少条边?试举例说明。 【解答】

0 1 2 3 4 (入边表)

0 1 2 3 4 5

A B C D E F ∧ 0 1 ∧ 0 ∧ 1 2 ∧ 3 5 ∧ 3 ∧ (出边表)

0 1 2 3 4 5 A B C D E F ∧ 4 ∧ 1 2 5 ∧ 1 4 ∧ 3 ∧ 4 ∧ (3) 邻接多重表(十字链表)

data fin fout A B C D E ∧ 1 4 ∧ (B, E) 2 5 ∧ ∧ (C, F) 3 1 (D, B) 3 4 (D, E) 5 4 ∧ ∧ (F, E)

∧ i j ilink jlink 0 1 (A, B) 0 3 ∧ ∧ (A, D) 1 2 ∧ (B, C)

5 F 97

第8章 图

n个顶点的无向连通图至少有n-1条边,n个顶点的有向强连通图至少有n条边。例如:

特例情况是当n = 1时,此时至少有0条边。

8-7对于有n个顶点的无向图,采用邻接矩阵表示,如何判断以下问题: 图中有多少条边?任意两个顶点i和j之间是否有边相连?任意一个顶点的度是多少? 【解答】

用邻接矩阵表示无向图时,因为是对称矩阵,对矩阵的上三角部分或下三角部分检测一遍,统计其中的非零元素个数,就是图中的边数。如果邻接矩阵中A[i][j] 不为零,说明顶点i与顶点j之间有边相连。此外统计矩阵第i行或第i列的非零元素个数,就可得到顶点i的度数。

8-8对于如右图所示的有向图,试写出:

(1) 从顶点①出发进行深度优先搜索所得到的深度优先生成树; (2) 从顶点②出发进行广度优先搜索所得到的广度优先生成树;

② ④ ① ③ ⑤

【解答】

② ④

② ④ (1) 以顶点①为根的深度优先生成树(不唯一):② ③ ④ ⑤ ⑥

② ④ ①

③ ⑤

(2) 以顶点②为根的广度优先生成树:

① ③

8-9 试扩充深度优先搜索算法,在遍历图的过程中建立生成森林的左子女-右兄弟链表。算法的首部为

void Graph::DFS ( const int v, int visited [ ], TreeNode * t ) 其中,指针t指向生成森林上具有图顶点v信息的根结点。(提示:在继续按深度方向从根v的某一未访问过的邻接顶点w向下遍历之前,建立子女结点。但需要判断是作为根的第一个子女还是作为其子女的右兄弟链入生成树。) 【解答】

为建立生成森林,需要先给出建立生成树的算法,然后再在遍历图的过程中,通过一次次地调用这

te mplate void Graph :: DFS_Tree ( const int v, int visited [ ], TreeNode *t ) { //从图的顶点v出发, 深度优先遍历图, 建立以t (已在上层算法中建立)为根的生成树。 Visited[v] = 1; int first = 1; TreeNode * p, * q; int w = GetFirstNeighbor ( v ); while ( w != -1 ) {

//取第一个邻接顶点 //若邻接顶点存在

个算法,以建立生成森林。

98

第8章 图

} }

if ( vosited[w] == 0 ) {

//且该邻接结点未访问过

p = new TreeNode ( GetValue (w) ); if ( first == 1 )

//建立新的生成树结点 //若根*t还未链入任一子女 //新结点*p成为根*t的第一个子女 //否则新结点*p成为*q的下一个兄弟 //指针q总指示兄弟链最后一个结点 //从*q向下建立子树

{ t->setFirstChild ( p ); first = 0; }

else q->setNextSibling ( p ); q = p;

DFS_Tree ( w, visited, q ); }

w = GetNextNeighbor ( v, w );

//取顶点v排在邻接顶点w的下一个邻接顶点

下一个算法用于建立以左子女-右兄弟链表为存储表示的生成森林。

template void Graph :: DFS_Forest ( Tree & T ) {

//从图的顶点v出发, 深度优先遍历图, 建立以左子女-右兄弟链表表示的生成森林T。 T.root = NULL; int n = NumberOfVertices ( ); TreeNode * p, * q; int * visited = new int [ n ];

//建立访问标记数组

//顶点个数

for ( int v = 0; v < n; v++ ) visited[v] = 0; for ( v = 0; v < n; v++ ) }

if ( visited[v] == 0 ) {

//逐个顶点检测 //若尚未访问过 //建立新结点*p

//原来是空的生成森林, 新结点成为根 //否则新结点*p成为*q的下一个兄弟

p = new TreeNode ( GetValue ( v ) ); if ( T.root == NULL ) T.root = p; else q-> setNextSibling ( p ); q = p;

DFS_Tree ( v, visited, p ); }

//建立以*p为根的生成树

8-10 用邻接表表示图时,顶点个数设为n,边的条数设为e,在邻接表上执行有关图的遍历操作时,时间代价是O(n*e)?还是O(n+e)?或者是O(max(n,e))? 【解答】

在邻接表上执行图的遍历操作时,需要对邻接表中所有的边链表中的结点访问一次,还需要对所有的顶点访问一次,所以时间代价是O(n+e)。

8-11 右图是一个连通图,请画出

(1) 以顶点①为根的深度优先生成树; (2) 如果有关节点,请找出所有的关节点。

(3) 如果想把该连通图变成重连通图,至少在图中加几条边? 如何加? 【解答】

⑨ ① ③ ⑧ ⑦ ②

⑥ ⑤

⑩ ④

(1) 以顶点①为根的深度优先生成树:

99

第8章 图

⑩ ③ ① ⑨ ⑧ ⑦ ②

⑥ ⑤

(2) 关节点为 ①,②,③,⑦,⑧

(3) 至少加四条边 (1, 10), (3, 4), (4, 5), (5, 6)。从③的子孙结点⑩到③的祖先结点①引一条边,从②

的子孙结点④到根①的另一分支③引一条边,并将⑦的子孙结点⑤、⑥与结点④连结起来,可使其变为重连通图。

⑩ ⑨ ① ③ ⑧ ② ④ ⑦

⑥ ⑤

8-12试证明在一个有n个顶点的完全图中,生成树的数目至少有2n-1-1。 【证明】略

8-13 编写一个完整的程序,首先定义堆和并查集的结构类型和相关操作,再定义Kruskal求连通网络的最小生成树算法的实现。并以右图为例,写出求解过程中堆、并查集和最小生成树的变化。 【解答】

求解过程的第一步是对所有的边,按其权值大小建堆:

11

7

① 7

10 9

③ 5

8

6

④ ⑥

1 2 7 1 3 11 2 3 10 1 2 7 2 4 9 1 3 11 加(2, 4)

3 4 5 1 2 7 1 3 11 2 4 9 加(3, 4)

2 3 10 2 3 10 加(1, 2), (1, 3),

(2,3)

3 4 5 1 2 7 1 3 11 2 4 9 3 5 7 2 3 10 1 2 7 3 4 5 3 5 7 2 3 10 3 6 8 1 3 11 2 4 9 加(3, 5) 加(3, 6)

3 4 5 5 6 6 1 2 7 1 3 11 100

3 5 7 2 3 10 3 6 8 加(5, 6)

2 4 9

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据结构第八章作业提示在线全文阅读。

数据结构第八章作业提示.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/360422.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: