第6章 图习题参考答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A. B. C. D.
5.对某个无向图的邻接矩阵来说,下列叙述正确的是(A)。
A.第 行上的非零元素个数和第 列上的非零元素个数一定相等
B.矩阵中的非零元素个数等于图中的边数
C.第 行与第 列上的非零元素的总数等于顶点 的度数
D.矩阵中非全零行的行数等于图中的顶点数
6.已知一个有向图的邻接矩阵,要删除所有以第 个顶点为孤尾的边,应该(B)。
w)) {
if (!visited[w]) {// w为u的尚未访问的邻接顶点
visited[w] = true;
P.offer(G.getVex(w));
Q.offer(w);
}
}
}
System.out.println("图的第" + ++i + "个连通分量为:");
while (!P.isEmpty())
int v = G.locateVex(sc.next());
int u = G.locateVex(sc.next());
G.addArc(v, u, 0);
}
return G;
}
2.无向图采用邻接表存储结构,编写算法输出图中各连通分量的顶点序列。
参考答案:
public static void CC_BFS(IGraph G) throws Exception {
System.out.print(P.poll().toString() + " ");
System.out.println();
}
}
}
3.编写算法判别以邻接表方式存储的无向图中是否存在由顶点 u到顶点v的路径( u≠v)。
可以采用深度优先搜索遍历策略。当顶点u和顶点v在无向图的同一连通分量中时,从顶点u到顶点v一定有路径,可从顶点u(v)进行深度优先搜索,一定可以遍历至顶点v(u)。否则,遍历不能成功,不存在由顶点u到顶点v的路径。
}
}
C.用邻接表存储图,占用的存储空间只与图中顶点数有关,而与边数无关
D.用邻接表存储图,占用的存储空间只与图中边数有关,而与顶点数无关
8.对图的深度优先遍历,类似于对树的哪种遍历?……(A)
A.先根遍历B.中根遍历C.后根遍历D.层次遍历
9.任何一个无向连通图的最小生成树(B)。
A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在
(1)每个顶点的出/入度;
(2)邻接矩阵;
(3)邻接表;
(4)逆邻接表。
答:
(1)每个顶点的出/入度是:
出度
入度
1
0
3
2
2
2
3
2
1
4
3
1
5
1
2
6
3百度文库
2
(2)邻接矩阵:
(3)邻接表:
(4)逆邻接表:
2.试对如图6.29所示的非连通图,画出其广度优先生成森林。
答:
3.已知图的邻接矩阵如图6.30所示。试分别画出自顶点A出发进行遍历所得的深度优先生成树和广度优先生成树。
LinkQueue P = new LinkQueue();//辅助队列P,用于记录连通分量的顶点
int i = 0;//用于记数连通分量的个数
for (int v = 0; v < G.getVexNum(); v++) {
P.clear();//队列清空
if (!visited[v]) {// v尚未访问
for (int w = 0; w < G.getVexNum(); w++)
//访问标志数组初始化
visited[w] = false;
find_DFS(G, u, v);
if (find)
System.out.println(G.getVex(u) + "和" + G.getVex(v) + "之间至少存在一条路径!");
四、算法设计题
1.编写算法,从键盘读入有向图的顶点和弧,创建有向图的邻接表存储结构。
参考答案:
public static ALGraph createDG() {
Scanner sc = new Scanner(System.in);
System.out.println("请分别输入有向图的顶点数和边数:");
else
System.out.println(G.getVex(u) + "和" + G.getVex(v) + "之间不存在路径!");
}
private void find_DFS(IGraph G, int u, int v) throws Exception {
if (u == v) {
find = true;
A.将邻接矩阵的第 行删除B.将邻接矩阵的第 行元素全部置为0
C.将邻接矩阵的第 列删除D.将邻接矩阵的第 列元素全部置为0
7.下面关于图的存储的叙述中,哪一个是正确的?……(A)
A.用邻接矩阵存储图,占用的存储空间只与图中顶点数有关,而与边数无关
B.用邻接矩阵存储图,占用的存储空间只与图中边数有关,而与顶点数无关
2.若一个无向图有100条边,则其顶点总数最少为15个。
3. 个顶点的连通无向图至少有 条边,至多有 条边。
4.若有向图 的邻接矩阵为:
则顶点 的入度是3。
5.对于一个有向图,若一个顶点的度为 ,出度为 ,则对应逆邻接表中该顶点单链表中的边结点数为 。
6.图的遍历算法BFS中用到辅助队列,每个顶点最多进队1次。
//构造顶点向量
vexs[v] = new VNode(sc.next());
ALGraph G = new ALGraph(GraphKind.DG, vexNum, arcNum, vexs);
System.out.println("请输入各个边的起点和终点:");
for (int k = 0; k < arcNum; k++) {
答:
4.请对如图6.31所示的无向网:
(1)写出它的邻接矩阵,并按克鲁斯卡尔算法求其最小生成树;
(2)写出它的邻接表,并按普里姆算法求其最小生成树。
答:(1)
(2)
5.试列出图6.32中全部可能的拓扑有序序列。
答:abcdef、abcef、abecdf、bacdef、bacedf、baecdf、beacdf
int vexNum = sc.nextInt();
int arcNum = sc.nextInt();
VNode[] vexs = new VNode[vexNum];
System.out.println("请分别输入有向图的各个顶点:");
for (int v = 0; v < vexNum; v++)
参考答案:
private boolean[] visited;//访问标志数组
private boolean find = false;//标示是否已找到了指定长度的路径
public void findPath(IGraph G, int u, int v) throws Exception {
visited = new boolean[G.getVexNum()];
习题六
一、选择题
1.在一个有 个顶点的有向图中,若所有顶点的出度之和为 ,则所有顶点的入度之和为(A)。
A. B. C. D.
2.一个有向图有 个顶点,则每个顶点的度可能的最大值是(B)。
A. B. C. D.
3.具有6个顶点的无向图至少应有(A)条边才能确保是一个连通图。
A.5B.6C.7D.8
4.一个有n个顶点的无向图最多有(C)条边。
10.下面是三个关于有向图运算的叙述:
(1)求两个指向结点间的最短路径,其结果必定是唯一的
(2)求有向图结点的拓扑序列,其结果必定是唯一的
(3)求AOE网的关键路径,其结果必定是唯一的
其中哪个(些)是正确的?……(D)
A.只有(1)B.(1)和(2)C.都正确D.都不正确
二、填空题
1.若用 表示图中顶点数,则有 条边的无向图称为完全图。
visited[v] = true;
P.offer(G.getVex(v));
Q.offer(v);// v入队列
while (!Q.isEmpty()) {
int u = (Integer) Q.poll();//队头元素出队列并赋值给u
for (int w = G.firstAdjVex(u); w >= 0; w = G.nextAdjVex(u,
} else if (!find) {
visited[u] = true;
for (int w = G.firstAdjVex(u); w >= 0; w = G.nextAdjVex(u, w))
if (!visited[w])
find_DFS(G, w, v);//对v的尚未访问的邻接顶点w递归调用find_DFS
boolean[] visited = new boolean[G.getVexNum()];//访问标志数组
for (int v = 0; v < G.getVexNum(); v++)
//访问标志数组初始化
visited[v] = false;
LinkQueue Q = new LinkQueue();//辅助队列Q
7.在求最小生成树的两种算法中,克鲁斯卡尔算法适合于稀疏图。
8.数据结构中的迪杰斯特拉算法是用来求某个源点到其余各顶点的最短路径。
9.除了使用拓扑排序的方法,还有深度优先搜索方法可以判断出一个有向图是否有回路。
10.在用邻接表表示图时,拓扑排序算法的时间复杂度为 。
三、应用题
1.已知如图6.28所示的有向图,请给出该图的
5.对某个无向图的邻接矩阵来说,下列叙述正确的是(A)。
A.第 行上的非零元素个数和第 列上的非零元素个数一定相等
B.矩阵中的非零元素个数等于图中的边数
C.第 行与第 列上的非零元素的总数等于顶点 的度数
D.矩阵中非全零行的行数等于图中的顶点数
6.已知一个有向图的邻接矩阵,要删除所有以第 个顶点为孤尾的边,应该(B)。
w)) {
if (!visited[w]) {// w为u的尚未访问的邻接顶点
visited[w] = true;
P.offer(G.getVex(w));
Q.offer(w);
}
}
}
System.out.println("图的第" + ++i + "个连通分量为:");
while (!P.isEmpty())
int v = G.locateVex(sc.next());
int u = G.locateVex(sc.next());
G.addArc(v, u, 0);
}
return G;
}
2.无向图采用邻接表存储结构,编写算法输出图中各连通分量的顶点序列。
参考答案:
public static void CC_BFS(IGraph G) throws Exception {
System.out.print(P.poll().toString() + " ");
System.out.println();
}
}
}
3.编写算法判别以邻接表方式存储的无向图中是否存在由顶点 u到顶点v的路径( u≠v)。
可以采用深度优先搜索遍历策略。当顶点u和顶点v在无向图的同一连通分量中时,从顶点u到顶点v一定有路径,可从顶点u(v)进行深度优先搜索,一定可以遍历至顶点v(u)。否则,遍历不能成功,不存在由顶点u到顶点v的路径。
}
}
C.用邻接表存储图,占用的存储空间只与图中顶点数有关,而与边数无关
D.用邻接表存储图,占用的存储空间只与图中边数有关,而与顶点数无关
8.对图的深度优先遍历,类似于对树的哪种遍历?……(A)
A.先根遍历B.中根遍历C.后根遍历D.层次遍历
9.任何一个无向连通图的最小生成树(B)。
A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在
(1)每个顶点的出/入度;
(2)邻接矩阵;
(3)邻接表;
(4)逆邻接表。
答:
(1)每个顶点的出/入度是:
出度
入度
1
0
3
2
2
2
3
2
1
4
3
1
5
1
2
6
3百度文库
2
(2)邻接矩阵:
(3)邻接表:
(4)逆邻接表:
2.试对如图6.29所示的非连通图,画出其广度优先生成森林。
答:
3.已知图的邻接矩阵如图6.30所示。试分别画出自顶点A出发进行遍历所得的深度优先生成树和广度优先生成树。
LinkQueue P = new LinkQueue();//辅助队列P,用于记录连通分量的顶点
int i = 0;//用于记数连通分量的个数
for (int v = 0; v < G.getVexNum(); v++) {
P.clear();//队列清空
if (!visited[v]) {// v尚未访问
for (int w = 0; w < G.getVexNum(); w++)
//访问标志数组初始化
visited[w] = false;
find_DFS(G, u, v);
if (find)
System.out.println(G.getVex(u) + "和" + G.getVex(v) + "之间至少存在一条路径!");
四、算法设计题
1.编写算法,从键盘读入有向图的顶点和弧,创建有向图的邻接表存储结构。
参考答案:
public static ALGraph createDG() {
Scanner sc = new Scanner(System.in);
System.out.println("请分别输入有向图的顶点数和边数:");
else
System.out.println(G.getVex(u) + "和" + G.getVex(v) + "之间不存在路径!");
}
private void find_DFS(IGraph G, int u, int v) throws Exception {
if (u == v) {
find = true;
A.将邻接矩阵的第 行删除B.将邻接矩阵的第 行元素全部置为0
C.将邻接矩阵的第 列删除D.将邻接矩阵的第 列元素全部置为0
7.下面关于图的存储的叙述中,哪一个是正确的?……(A)
A.用邻接矩阵存储图,占用的存储空间只与图中顶点数有关,而与边数无关
B.用邻接矩阵存储图,占用的存储空间只与图中边数有关,而与顶点数无关
2.若一个无向图有100条边,则其顶点总数最少为15个。
3. 个顶点的连通无向图至少有 条边,至多有 条边。
4.若有向图 的邻接矩阵为:
则顶点 的入度是3。
5.对于一个有向图,若一个顶点的度为 ,出度为 ,则对应逆邻接表中该顶点单链表中的边结点数为 。
6.图的遍历算法BFS中用到辅助队列,每个顶点最多进队1次。
//构造顶点向量
vexs[v] = new VNode(sc.next());
ALGraph G = new ALGraph(GraphKind.DG, vexNum, arcNum, vexs);
System.out.println("请输入各个边的起点和终点:");
for (int k = 0; k < arcNum; k++) {
答:
4.请对如图6.31所示的无向网:
(1)写出它的邻接矩阵,并按克鲁斯卡尔算法求其最小生成树;
(2)写出它的邻接表,并按普里姆算法求其最小生成树。
答:(1)
(2)
5.试列出图6.32中全部可能的拓扑有序序列。
答:abcdef、abcef、abecdf、bacdef、bacedf、baecdf、beacdf
int vexNum = sc.nextInt();
int arcNum = sc.nextInt();
VNode[] vexs = new VNode[vexNum];
System.out.println("请分别输入有向图的各个顶点:");
for (int v = 0; v < vexNum; v++)
参考答案:
private boolean[] visited;//访问标志数组
private boolean find = false;//标示是否已找到了指定长度的路径
public void findPath(IGraph G, int u, int v) throws Exception {
visited = new boolean[G.getVexNum()];
习题六
一、选择题
1.在一个有 个顶点的有向图中,若所有顶点的出度之和为 ,则所有顶点的入度之和为(A)。
A. B. C. D.
2.一个有向图有 个顶点,则每个顶点的度可能的最大值是(B)。
A. B. C. D.
3.具有6个顶点的无向图至少应有(A)条边才能确保是一个连通图。
A.5B.6C.7D.8
4.一个有n个顶点的无向图最多有(C)条边。
10.下面是三个关于有向图运算的叙述:
(1)求两个指向结点间的最短路径,其结果必定是唯一的
(2)求有向图结点的拓扑序列,其结果必定是唯一的
(3)求AOE网的关键路径,其结果必定是唯一的
其中哪个(些)是正确的?……(D)
A.只有(1)B.(1)和(2)C.都正确D.都不正确
二、填空题
1.若用 表示图中顶点数,则有 条边的无向图称为完全图。
visited[v] = true;
P.offer(G.getVex(v));
Q.offer(v);// v入队列
while (!Q.isEmpty()) {
int u = (Integer) Q.poll();//队头元素出队列并赋值给u
for (int w = G.firstAdjVex(u); w >= 0; w = G.nextAdjVex(u,
} else if (!find) {
visited[u] = true;
for (int w = G.firstAdjVex(u); w >= 0; w = G.nextAdjVex(u, w))
if (!visited[w])
find_DFS(G, w, v);//对v的尚未访问的邻接顶点w递归调用find_DFS
boolean[] visited = new boolean[G.getVexNum()];//访问标志数组
for (int v = 0; v < G.getVexNum(); v++)
//访问标志数组初始化
visited[v] = false;
LinkQueue Q = new LinkQueue();//辅助队列Q
7.在求最小生成树的两种算法中,克鲁斯卡尔算法适合于稀疏图。
8.数据结构中的迪杰斯特拉算法是用来求某个源点到其余各顶点的最短路径。
9.除了使用拓扑排序的方法,还有深度优先搜索方法可以判断出一个有向图是否有回路。
10.在用邻接表表示图时,拓扑排序算法的时间复杂度为 。
三、应用题
1.已知如图6.28所示的有向图,请给出该图的