判断题
1.Let M be the minimum spanning tree of a weighted graph G. Then the path in M between V1 and V2 must be the shortest path between them in G.
2.Prim’s algorithm is to maintain a forest and to merge two trees into one at each stage.
3.Kruskal’s algorithm is to maintain a forest and to merge two trees into one at each stage.
4.Kruskal’s algorithm is to grow the minimum spanning tree by adding one edge, and thus an associated vertex, to the tree in each stage.
5.Prim’s algorithm is to grow the minimum spanning tree by adding one edge, and thus an associated vertex, to the tree in each stage.
6.If graph G is a connected graph, the spanning tree of G is a maximal connected subgraph containing all n vertices of G.
选择题
1.给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:
2.给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:
3.给定有权无向图如下。关于其最小生成树,下列哪句是对的?
|
选项
|
A
|
边(B, A)一定在树中,树的总权重为23
|
B
|
边(D, C)一定在树中,树的总权重为20
|
C
|
最小生成树不唯一,其总权重为23
|
D
|
最小生成树唯一,其总权重为20
|
4.任何一个无向连通图的最小生成树()。
|
选项
|
A
|
一定有多棵
|
B
|
可能不存在
|
C
|
有一棵或多棵
|
D
|
只有一棵
|
5.无向连通图的最小生成树( )
|
选项
|
A
|
一定唯一
|
B
|
有一个或多个
|
C
|
一定有多个
|
D
|
可能不存在
|
6.对于下列的网,使用Prim算法由顶点A出发,求最小生成树,吸取的第三条边是。
|
选项
|
A
|
(A,D)
|
B
|
(D,E)
|
C
|
(C,E)
|
D
|
(B,C)
|
7.下列说法中正确的是
|
选项
|
A
|
若一个无向图的最小生成树唯一,则该无向图中没有权值相同的边
|
B
|
若一个无向完全图有 N 个顶点,且各边权值均相同,则该图有 N! 种最小生成树
|
C
|
若一个无向连通图没有权值相同的边,则该无向图的最小生成树唯一
|
D
|
一个无向图的最小生成树是该图的极大连通子图
|
8.在求最小生成树时,Prim算法更适合于____。
|
选项
|
A
|
有向图
|
B
|
无向图
|
C
|
稀疏图
|
D
|
稠密图
|
9.在求最小生成树时,Kruskal算法更适合于____。
|
选项
|
A
|
有向图
|
B
|
无向图
|
C
|
稀疏图
|
D
|
稠密图
|
10.以下哪个不是给定无向带权图的最小生成树?
11.给出如下图所示的具有 7 个结点的网 G,采用Prim算法,从4号结点开始,给出该网的最小生成树。下列哪个选项给出了正确的树结点收集顺序?
|
选项
|
A
|
4501362
|
B
|
4526301
|
C
|
4561023
|
D
|
4563201
|
12.The minimum spanning tree of any connected weighted graph:
|
选项
|
A
|
is unique
|
B
|
is not unique
|
C
|
may not be unique
|
D
|
may not exist
|
程序填空题
1.最小生成树(普里姆算法)。
#include <iostream>
#define MVNum 100
#define MaxInt 32767
using namespace std;struct edge{char adjvex;int lowcost;
}closedge[MVNum];typedef struct{ char vexs[MVNum]; int arcs[MVNum][MVNum]; int vexnum,arcnum;
}AMGraph;int LocateVex(AMGraph G , char v);//实现细节隐藏
int CreateUDN(AMGraph &G);//实现细节隐藏int Min(AMGraph G){int i;int index = -1;int min = MaxInt;for(i = 0 ; i < G.vexnum ; ++i){if(min > closedge[i].lowcost && closedge[i].lowcost != 0){min = closedge[i].lowcost;index = i;}}return index;
}void MiniSpanTree_Prim(AMGraph G, char u){ int k , j , i;char u0 , v0;k =LocateVex(G, u);for(j = 0; j < G.vexnum; ++j){ if(j != k){ closedge[j].adjvex = u;closedge[j].lowcost = G.arcs[k][j];}}closedge[k].lowcost = 0;for(i = 1; i < G.vexnum; ++i){k = Min(G); u0 = closedge[k].adjvex;v0 = G.vexs[k]; cout << u0 << "->" << v0 << endl;closedge[k].lowcost = 0; for(j = 0; j < G.vexnum; ++j) if(G.arcs[k][j] < closedge[j].lowcost){closedge[j].adjvex = G.vexs[k];closedge[j].lowcost = G.arcs[k][j];}}
}int main(){AMGraph G;CreateUDN(G);char u;cin >> u;MiniSpanTree_Prim(G , u);return 0;
}
2.最小生成树(克鲁斯卡尔算法)。
#include <stdio.h>
#define MVNum 100
#define MaxInt 32767 typedef struct{ char vexs[MVNum];int arcs[MVNum][MVNum];int vexnum,arcnum;
}AMGraph;struct Evode{char Head;char Tail;int lowcost;
}Edge[(MVNum * (MVNum - 1)) / 2];int Vexset[MVNum];int LocateVex(AMGraph G , char v){for(int i = 0; i < G.vexnum; ++i)if(G.vexs[i] == v)return i;return -1;
}void CreateUDN(AMGraph &G){ int i , j , k;char c;scanf("%d %d",&G.vexnum,&G.arcnum); getchar();for(i = 0; i < G.vexnum; ++i){ G.vexs[i]=getchar();}getchar();for(i = 0; i < G.vexnum; ++i) for(j = 0; j < G.vexnum; ++j) G.arcs[i][j] = MaxInt;for(k = 0; k < G.arcnum;++k){char v1 , v2;int w;scanf("%c %c %d",&v1,&v2,&w);getchar();i = LocateVex(G, v1); j = LocateVex(G, v2); G.arcs[i][j] = w;G.arcs[j][i] = G.arcs[i][j];Edge[k].lowcost = w;Edge[k].Head = v1;Edge[k].Tail =v2;}
}void Sort(AMGraph G){int m = G.arcnum - 2;int flag = 1;while((m > 0) && flag == 1){flag = 0;for(int j = 0 ; j <= m ; j++){if(Edge[j].lowcost > Edge[j+ 1].lowcost){flag = 1;struct Evode temp=Edge[j];Edge[j]=Edge[j + 1];Edge[j + 1]=temp;}}--m;}
}void MiniSpanTree_Kruskal(AMGraph G){ int i , j , v1 , v2 , vs1 , vs2;Sort(G); for(i = 0; i < G.vexnum; ++i) Vexset[i] = i;for(i = 0; i < G.arcnum; ++i){ v1 =LocateVex(G, Edge[i].Head); v2 =LocateVex(G, Edge[i].Tail); vs1 = Vexset[v1];vs2 = Vexset[v2]; if(vs1 != vs2){printf("%c->%c\n",Edge[i].Head ,Edge[i].Tail); for(j = 0; j < G.vexnum; ++j)if(Vexset[j] == vs2) Vexset[j] = vs1;}}
}int main(){AMGraph G;CreateUDN(G);MiniSpanTree_Kruskal(G);return 0;
}
3.下列代码的功能是使用Prim算法求出无向图的最小生成树权值总和,请补全。
给出的图用邻接矩阵存储。若两顶点之间没有直接路径,则对应权值为 INF,且题目保证 INF 值足够大;若找不到距离最短的顶点或者无法求出权值总和,则返回 ERROR。
typedef int WeightType;
typedef int VertexType;
typedef struct {int Nv;WeightType G[MAX_GRAPH_SIZE][MAX_GRAPH_SIZE];
} GNode, * MGraph;VertexType FindMinDist(MGraph Graph, WeightType dist[]) {VertexType MinV = -1, V;WeightType MinDist = INF;for (V = 0; V < Graph->Nv; V++) {if (dist[V] != 0 && dist[V] < MinDist) {MinDist = dist[V];MinV = V;}}if (MinDist < INF) {return MinV;} else {return ERROR;}
}int Prim(MGraph Graph) {int dist[MAX_GRAPH_SIZE];int TotalWeight = 0, VCount = 0;VertexType V, W;for (V = 0; V < Graph->Nv; V++) {dist[V] = Graph->G[0][V];}dist[0] = 0;VCount++;while (1) {VertexType MinV;if ((MinV = FindMinDist(Graph, dist)) == ERROR) {break;}TotalWeight += dist[MinV];dist[MinV] = 0;VCount++;for (W = 0; W < Graph->Nv; W++) {if (dist[W] != 0 && dist[W] > Graph->G[MinV][W]) {dist[W] = Graph->G[MinV][W];}}}if (VCount != Graph->Nv) {return ERROR;} else {return TotalWeight;}
}
【PTA】【数据结构与算法】最小生成树相关推荐
- PTA数据结构与算法题目集6-4 6-3 6-8
PTA数据结构与算法题目集(中文) 6-4 链式表的按序号查找 ElementType FindKth( List L, int K ){int index = 0;while(L){++index; ...
- PTA数据结构与算法题目集 6-9 二叉树的遍历
PTA数据结构与算法题目集(中文) 6-9 二叉树的遍历 void InorderTraversal( BinTree BT ){if(BT==NULL)return;if(BT->Left){ ...
- PTA 数据结构与算法题目集(中文) 7-10 公路村村通 (30分) 最小生成树(kruskal算法)
我的GIS/CS学习笔记:https://github.com/yunwei37/ZJU-CS-GIS-ClassNotes <一个浙江大学本科生的计算机.地理信息科学知识库 > 还有不少 ...
- 数据结构与算法—最小生成树(Prim算法和Kruskal算法算法详解)
前言 在数据结构与算法的图论中,(生成)最小生成树算法是一种常用并且和生活贴切比较近的一种算法.但是可能很多人对概念不是很清楚.我们看下百度百科对于最小生成树定义: 一个有 n 个结点的连通图的生成树 ...
- PTA 数据结构与算法题目集(中文)
一:数据结构与算法题目(中文版) 7-2 一元多项式的乘法与加法运算 (20 分) 7-3 树的同构 (25 分) 7-4 是否同一棵二叉搜索树 (25 分) 7-6 列出连通集 (25 分)(详解) ...
- 7-10 公路村村通 (最小生成树Prim算法) | PTA数据结构与算法——C语言实现
公路村村通 非常直白的最小生成树问题. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通 ...
- 对应生成树的基本回路_数据结构与算法——最小生成树
1 引言 在之前的文章中已经详细介绍了图的一些基础操作.而在实际生活中的许多问题都是通过转化为图的这类数据结构来求解的,这就涉及到了许多图的算法研究. 例如:在 n 个城市之间铺设光缆,以保证这 n ...
- 浙大PTA数据结构与算法题目集(中文)题解集复习用
文章目录 7-1 最大子列和问题 (20分)(dp或贪心) 7-2 一元多项式的乘法与加法运算 (20分) 7-3 树的同构 (25分) 7-4 是否同一棵二叉搜索树 (25分) 7-5 堆中的路径 ...
- PTA数据结构与算法-第一章——褚论
文章目录 第一章--褚论 第二章--线性表 第三章--栈与队列 第四章--字符串 第五章--树与二叉树 第六章--图 第七章--排序 第八章--检索 判断题 单选题 程序填空题 第一章--褚论 第二章 ...
- PTA 数据结构与算法A实验八排序
7-1 统计工龄 (20 分) 给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工. 输入格式: 输入首先给出正整数N(≤10 5 ),即员工总人数:随后给出N个整数,即每个员工的工龄,范 ...
最新文章
- alteon ad3 配置
- web容器获取SSL指纹实现和ByPass
- MySQL划重点-查询-条件
- 微信小程序调试之【不在以下合法域名列表中】
- html5距离底部的距离代码,如何使距离为HTML5
- 项目管理工具project软件学习(五) - 创建WBS、设置任务依赖关系
- Powershell 语法总结
- 找不到 org/springframework/dao/support/PersistenceExceptionTranslator
- cad插件_CAD插件燕秀工具箱安装教程
- Mysql高阶sql语句
- amc 美国数学竞赛能用计算机吗,关于AMC美国数学竞赛的QA
- 记录卸载h5py出现的问题
- 电脑屏幕保护推荐——Fliqlo
- 人工智能(Artificial Intelligence)浅谈,填补你的人工智能空白
- 掏心掏肺,教你如何把苍白的人生写成老板都心动的简历
- 深入理解苹果系统(Unicode)字符串的排序方法
- pycharm 解决pip安装时,新版本替换旧版本的问题
- currentThread方法
- 【无敌恢复U盘数据的方法】
- [计算机组成原理]机器数及特点
热门文章
- Android渲染(二)------ Shader之LinearGradient用法(线性渲染)
- new echarts.graphic.LinearGradient内置渐变器
- 数智技术的碳中和应用蓝图
- 这群年轻人禁欲8年,成了日本最好的匠人! (程序员专注可以借鉴)
- SQL 计算累积销售额,百分比
- php学习(四):CodeIgniter框架,仅次于Laravel的框架(CI 4)
- 分割pdf的办法?看这里就明白了!
- 付费订阅故事难讲,腾讯音乐如何“过河”?
- 2017微信公开课张小龙小程序演讲视频
- 如何让GPT写出高质量小红书文案 ?