最小生成树-实验报告
最小生成树 实验报告

最小生成树实验报告最小生成树实验报告一、引言最小生成树是图论中的一个重要概念,它在实际问题中有着广泛的应用。
本次实验旨在通过编程实现最小生成树算法,并通过实验数据对算法进行分析和评估。
二、算法介绍最小生成树算法的目标是在给定的带权无向图中找到一棵生成树,使得树上所有边的权重之和最小。
本次实验我们选择了两种经典的最小生成树算法:Prim 算法和Kruskal算法。
1. Prim算法Prim算法是一种贪心算法,它从一个顶点开始,逐步扩展生成树的规模,直到包含所有顶点为止。
算法的具体步骤如下:(1)选择一个起始顶点,将其加入生成树中。
(2)从与生成树相邻的顶点中选择一个权重最小的边,将其加入生成树中。
(3)重复上述步骤,直到生成树包含所有顶点。
2. Kruskal算法Kruskal算法是一种基于并查集的贪心算法,它首先将图中的边按权重从小到大进行排序,然后逐个加入生成树中,直到生成树包含所有顶点为止。
算法的具体步骤如下:(1)将图中的边按权重从小到大进行排序。
(2)逐个加入边,如果该边的两个顶点不在同一个连通分量中,则将其加入生成树中。
(3)重复上述步骤,直到生成树包含所有顶点。
三、实验过程本次实验我们使用C++语言实现了Prim算法和Kruskal算法,并通过随机生成的图数据进行了测试。
1. Prim算法的实现我们首先使用邻接矩阵表示图的结构,然后利用优先队列来选择权重最小的边。
具体实现过程如下:(1)创建一个优先队列,用于存储生成树的候选边。
(2)选择一个起始顶点,将其加入生成树中。
(3)将与生成树相邻的顶点及其边加入优先队列。
(4)从优先队列中选择权重最小的边,将其加入生成树中,并更新优先队列。
(5)重复上述步骤,直到生成树包含所有顶点。
2. Kruskal算法的实现我们使用并查集来维护顶点之间的连通关系,通过排序后的边序列来逐个加入生成树中。
具体实现过程如下:(1)将图中的边按权重从小到大进行排序。
最小生成树 实验报告

最小生成树(Minimum Spanning Tree)实验报告1. 实验目的本实验旨在通过实践掌握最小生成树算法的基本原理和实现方法。
最小生成树是图论中的一个重要概念,用于解决具有权重的连通图的最优路径问题。
通过本实验,我们将学习如何使用最小生成树算法找到一棵连接图的所有节点且总权重最小的树。
2. 实验原理最小生成树是一个连通图的一种生成树,它的所有边的权重之和最小。
最小生成树的求解算法有多种,其中两种常用的算法是 Prim 算法和 Kruskal 算法。
2.1 Prim 算法Prim 算法是一种贪心算法,从一个节点开始,逐步扩展最小生成树的边。
具体步骤如下: 1. 选择一个起始节点作为最小生成树的根节点。
2. 在当前最小生成树的所有节点中选择一个与该树相连接的权重最小的边,将其加入最小生成树。
3. 将该节点标记为已访问。
4. 重复步骤 2 和步骤 3,直到所有节点都被访问。
2.2 Kruskal 算法Kruskal 算法也是一种贪心算法,通过不断选择权重最小的边来构建最小生成树。
具体步骤如下: 1. 对所有边按照权重进行排序。
2. 依次选择权重最小的边,如果该边的两个端点不在同一个连通分量中,则将该边加入最小生成树,并将这两个端点合并到同一个连通分量中。
3. 重复步骤 2,直到所有节点都在同一个连通分量中,即最小生成树构建完成。
3. 实验步骤本实验将使用 Prim 算法和 Kruskal 算法分别求解给定图的最小生成树。
3.1 数据准备首先,我们需要准备一个具有权重的连通图作为实验数据。
假设该图有 n 个节点和 m 条边,我们可以使用邻接矩阵或邻接表来表示这个图。
3.2 Prim 算法求解最小生成树1.首先,选择一个起始节点作为最小生成树的根节点,并将该节点标记为已访问。
2.初始化一个空的最小生成树,用于存储最终的结果。
3.重复以下步骤,直到所有节点都被访问:1.在当前最小生成树的所有节点中选择一个与该树相连接的权重最小的边,将其加入最小生成树。
求最小生成树(Kruskal算法)实验报告

求最小生成树(Kruskal算法)实验报告一、实验目的通过本次实验,掌握Kruskal算法的基本原理,能够使用该算法求解最小生成树问题,并能够进行实际应用。
同时,为学习算法的设计和分析打下基础。
二、实验内容1. 理解Kruskal算法的基本原理。
2. 实现Kruskal算法,并将其应用于求解最小生成树问题。
3. 设计实验测试用例,验证程序正确性并进行性能分析。
三、实验原理Kruskal算法是最小生成树问题的一种解决方法。
该算法基于贪心策略,通过不断选择最短的边来构造最小生成树。
实现步骤如下:1. 将所有边按权重从小到大进行排序。
2. 遍历所有边,每次选择一条没有出现在生成树中的最短边,并将该边所连接的两个顶点合并到同一连通分量中。
3. 直到所有的边都被遍历过,即可得到最小生成树。
四、实验设计本次实验的主要任务是实现Kruskal算法,并运用到最小生成树问题中。
为了测试算法的正确性和性能,需要设计适当的测试用例。
具体的实验步骤如下:1. 设计数据结构在Kruskal算法中,需要维护边的信息,并对边进行排序,同时需要维护顶点的信息。
为方便实现,可以使用C++语言的STL库中的vector和set数据结构。
vector用于存储顶点信息,set用于存储排序后的边信息。
其中,顶点包含顶点编号和连通分量编号,边包含起点、终点和边权重。
为了方便生成测试数据,定义两个常量:MAX_VERTEX和MAX_EDGE。
MAX_VERTEX表示最大顶点数量,MAX_EDGE表示最大边数量。
2. 生成测试数据为了测试算法的正确性和性能,需要生成不同大小的测试数据。
可以随机生成若干个顶点和相应的边,其中顶点编号从1开始连续编号,边的起点和终点使用随机数生成,边的权重也使用随机数生成。
3. 实现Kruskal算法根据算法原理,可以实现基本的Kruskal算法。
具体实现过程如下:1. 首先将所有的边按照权重从小到大排序,并分别初始化每个顶点的连通分量编号。
最小生成树算法实验报告

最小生成树算法实验报告【实验报告】最小生成树算法实验一、实验目的本次实验旨在研究最小生成树算法,通过对比不同的算法,并对实验结果进行分析,探索最小生成树算法的优劣势和适应场景。
二、实验过程1.算法介绍本次实验中我们将使用两种最小生成树算法:普里姆算法和克鲁斯卡尔算法。
- 普里姆算法(Prim算法):从一个顶点开始,不断在剩下的顶点中选择到当前已有的最小生成树的距离最小的边,将该边的另一个顶点加入树中,直到所有的顶点都加入树中。
- 克鲁斯卡尔算法(Kruskal算法):首先将所有边按照权值从小到大进行排序,然后以最小权值的边开始,依次选择权值最小且不会形成环路的边,直到找到n-1条边为止,其中n为顶点数。
2.实验步骤首先,我们使用Python语言实现了普里姆算法和克鲁斯卡尔算法。
然后,我们构造了一些测试用例,包括不同规模的图和不同权值分布的图。
最后,我们对实验结果进行对比分析。
三、实验结果1.测试用例设计我们设计了三个测试用例,分别为小规模图、中规模图和大规模图,具体如下:-小规模图:顶点数为5的图,权值随机分布。
-中规模图:顶点数为50的图,权值随机分布。
-大规模图:顶点数为100的图,权值随机分布。
2.实验结果分析我们的实验结果如下表所示:算法,小规模图,中规模图,大规模图:-------:,:------:,:------:,:------:普里姆算法,13,455,703从实验结果可以看出,对于小规模图和中规模图,普里姆算法的运行时间明显低于克鲁斯卡尔算法。
但是对于大规模图,克鲁斯卡尔算法的运行时间与普里姆算法的运行时间差距不大,甚至略小于普里姆算法。
这是因为克鲁斯卡尔算法中排序边的时间复杂度为O(ElogE),而普里姆算法中筛选最小距离的边的时间复杂度为O(V^2)。
综上所述,普里姆算法适用于较小规模的图,而克鲁斯卡尔算法适用于较大规模的图。
四、实验总结本次实验研究了最小生成树算法,通过对比实验结果,我们发现不同算法在不同规模的图上的表现有所差异。
实验八 图的最小生成树

浙江大学城市学院实验报告课程名称数据结构与算法实验项目名称实验八图的最小生成树实验成绩指导老师(签名)日期1.一.实验目的和要求2.掌握图的最小生成树的概念。
3.掌握生成最小生成树的Prim算法(用邻接矩阵表示图)。
1、二.实验内容2、编写用邻接矩阵表示无向带权图时图的基本操作的实现函数, 主要包括:①初始化邻接矩阵表示的无向带权图 void InitMatrix(adjmatrix G); ②建立邻接矩阵表示的无向带权图 void CreateMatrix(adjmatrix G, int n) (即通过输入图的每条边建立图的邻接矩阵); ③输出邻接矩阵表示的无向带权图void PrintMatrix(adjmatrix G, int n) (即输出图的每条边)。
把邻接矩阵的结构定义以及这些基本操作实现函数存放在头文件Graph1.h 中。
3、编写生成最小生成树的Prim算法函数void Prim(adjmatrix G, edgset CT,int n)以及输出边集数组的函数void PrintEdge(edgeset CT, int n)。
编写测试程序(即主函数), 通过调用上述函数首先建立并输出无向带权图, 然后生成最小生成树并输出(即输出边集)。
要求: 把边集数组的结构定义、Prim算法函数、输出边集数组的函数PrintEdge 以及主函数存放在文件test8.cpp中。
测试数据如下:填写实验报告, 实验报告文件取名为report8.doc。
5.上传实验报告文件report8.doc与源程序文件test8.cpp及Graph1.h到Ftp服务器上自己的文件夹下。
三.函数的功能说明及算法思路函数: void InitMatrix(adjmatrix GA)功能: 初始化邻接矩阵表示的无向带权图函数: void CreateMatrix(adjmatrix GA,int n)功能: 建立邻接矩阵表示的无向带权图函数: void PrintMatrix(adjmatrix GA,int n)功能: 输出邻接矩阵表示的无向带权图函数: void Prim(adjmatrix GA,edgeset CT,int n)功能: 生成最小生成树思路:设从连通带权图G = { V, E }中的某一顶点u0 出发;选择与它关联的具有最小权值的边<u0, v>, 将其顶点加入到生成树的顶点集合U中;以后每一步从一个顶点在U中, 而另一个顶点在V-U中的各条边中选择权值最小的边<u, v>,把该顶点加入到集合U中;如此继续下去, 直到图中的所有顶点都加入到生成树顶点集合U中为止。
数据结构实验报告 最小生成树

实验报告六(数学学院08级4班080204015 余燕川)实验目的:通过对图的基本知识的学习, 掌握图的基本概念, 构造最小生成树, 在此基础上上机实践, 调试程序。
实验题目:对一个给定的图G(V, E), 构造最小生成树。
三、实验分析:1.假设网G(V, E)是连通的, 从顶点u出发构造G的最小生成树T, 开始时, 记T=(U, B), 其中U是T顶点集合, B是T的边集合;2、开始时U={u0 }( u0 ∈V)B=空,重复执行下述操作:在所有的u ∈U,V∈V-U组成的边(u,v)中找出一条权值最小的边(u0,v0)并入边集B中,同时将v0加入顶点集U,直到U=V为止, 此时T中必中必有n-1条边, 则T=(U, B)为G的最小生成树。
四、实验部骤:(1)构写程序的大体框架;(2)具体编写每个操作的程序;(3)程序的检查;(4)程序的调试;五、程序调试问题:输入顶点后, 边的信息输不进去;如下图:六、实验结果:输入顶点数为5, 边数为8, 顶点为v1,v2,v3,v4,v5;后面出现了问题。
七、实验程序:#define MAXSIZE 100#define max 10typedef char datatype;typedef struct{datatype vexs[MAXSIZE];int edges[MAXSIZE][MAXSIZE];int n,e;}graph;struct{char end;int len;}minedge[max];void Creatgraph(graph *ga){int i,j,k,w;printf("Please put the number of graph's vexs and edges:");scanf("%d,%d",&(ga->n),&(ga->e));printf("shu rui ding dian:\n");for(i=0;i<ga->n;i++)scanf("%2c\n",&(ga->vexs[i]));for(i=0;i<ga->n;i++)for(j=0;j<ga->n;j++)ga->edges[i][j]=100;for(k=0;k<ga->e;k++){printf("shu rui %d tiao bian de xu hao i,j and quan zhi w:",k+1);scanf("%d,%d,%d\n",&i,&j,&w);ga->edges[i][j]=w;ga->edges[j][i]=w;}}void prim(graph *g,char u){int v,k,j=0,min;for (v=1;v<=g->n;v++)if(v!=u){minedge[v].end=u;minedge[v].len=g->edges[v][u];}minedge[u].len=0;for(k=1;k<g->n;j++){min=minedge[k].len;v=j;}if(min==MAXSIZE){printf("error!");}printf("zui xiao sheng cheng shu:");printf("%d %d",v,minedge[v].end);minedge[v].len=-minedge[v].len; for(j=1;j<=g->n;j++)if(g->edges[j][v]<minedge[j].len) {minedge[j].len=g->edges[j][v]; minedge[j].end=v;}}void main(){int i,j;graph *g;g=(graph *)malloc(sizeof(graph)); Creatgraph(g);printf("Sheng cheng shu:\n"); prim(g,g->vexs[0]);}。
最小生成树实验报告

最小生成树实验报告最小生成树实验报告引言:最小生成树是图论中一个重要的概念,它在许多实际问题中都有广泛的应用。
本次实验旨在通过实际操作,深入理解最小生成树的概念、算法及其在实际问题中的应用。
本文将从实验的目的、实验过程、实验结果及分析等方面进行详细的论述。
实验目的:1. 理解最小生成树的概念及其在实际问题中的应用;2. 掌握最小生成树的两种常用算法:Prim算法和Kruskal算法;3. 通过实际操作,加深对最小生成树算法的理解。
实验过程:1. 实验环境的搭建:首先,我们需要在计算机上搭建一个图论实验环境。
选择一门编程语言,如Python,来实现最小生成树算法。
通过安装相应的开发环境和图论库,我们可以方便地进行实验。
2. 数据的准备:为了进行最小生成树的实验,我们需要准备一组具有权值的图数据。
可以通过手动输入或从文件中读取的方式获取数据。
确保数据的合理性和完整性,以便进行后续的实验操作。
3. Prim算法的实现:Prim算法是一种贪心算法,用于求解最小生成树。
在实验中,我们需要实现Prim算法,并将其应用于准备好的图数据上。
通过编程实现,我们可以得到Prim算法生成的最小生成树。
4. Kruskal算法的实现:Kruskal算法是另一种常用的最小生成树算法。
与Prim算法不同,Kruskal算法是一种基于边的贪心算法。
同样地,我们需要实现Kruskal算法,并将其应用于准备好的图数据上,以获得Kruskal算法生成的最小生成树。
实验结果与分析:通过实验,我们得到了Prim算法和Kruskal算法生成的最小生成树。
我们可以将这两个结果进行对比和分析,以进一步理解这两种算法的特点和应用场景。
首先,我们可以比较两个算法生成的最小生成树的权值。
通过计算权值的总和,我们可以确定哪个算法生成的最小生成树更优。
此外,我们还可以比较两个算法生成的最小生成树的结构,观察它们是否存在差异。
其次,我们可以分析两个算法的时间复杂度和空间复杂度。
实验5 最小生成树算法的设计与实现(报告)

实验5 最小生成树算法的设计与实现一、实验目的1、根据算法设计需要, 掌握连通图的灵活表示方法;2、掌握最小生成树算法,如Prim、Kruskal算法;3、基本掌握贪心算法的一般设计方法;4、进一步掌握集合的表示与操作算法的应用。
二、实验内容1、认真阅读算法设计教材和数据结构教材内容, 熟习连通图的不同表示方法和最小生成树算法;2、设计Kruskal算法实验程序。
有n个城市可以用(n-1)条路将它们连通,求最小总路程的和。
设计测试问题,修改并调试程序, 输出最小生成树的各条边, 直至正确为止。
三、Kruskal算法的原理方法边权排序:1 3 14 6 23 6 41 4 52 3 53 4 52 5 61 2 63 5 65 6 61. 初始化时:属于最小生成树的顶点U={}不属于最小生成树的顶点V={1,2,3,4,5,6}2. 根据边权排序,选出还没有连接并且权最小的边(1 3 1),属于最小生成树的顶点U={1,3},不属于最小生成树的顶点V={2,4,5,6}3. 根据边权排序,选出还没有连接并且权最小的边(4 6 2),属于最小生成树的顶点U={{1,3},{4,6}}(还没有合在一起,有两颗子树),不属于最小生成树的顶点V={2,5}4. 根据边权排序,选出还没有连接并且权最小的边(3 6 4),属于最小生成树的顶点U={1,3,4,6}(合在一起),不属于最小生成树的顶点V={2,5}5. 根据边权排序,选出还没有连接并且权最小的边(3 6 4),属于最小生成树的顶点U={1,2,3,4,6},,不属于最小生成树的顶点V={5}6. 根据边权排序,选出还没有连接并且权最小的边(3 6 4),属于最小生成树的顶点U={1,2,3,4,5,6}此时,最小生成树已完成四、实验程序的功能模块功能模块:bool cmp(Edge a,Edge b);//定义比较方法int getfa(int x);//在并查集森林中找到x的祖先int same(int x,int y);//判断祖先是否是同一个,即是否联通void merge(int x,int y); //合并子树,即联通两子树sort(e+1,e+m+1,cmp); //对边按边权进行升序排序详细代码:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define MAXN_E 100000#define MAXN_V 100000using namespace std;struct Edge{int fm,to,dist; //边的起始顶点,边的到达顶点,边权}e[MAXN_E];int fa[MAXN_V],n,m; //顶点数组,顶点总数,边总数//定义比较,只是边权比较bool cmp(Edge a,Edge b){return a.dist < b.dist;}//查找x的祖先int getfa(int x){//getfa是在并查集森林中找到x的祖先if(fa[x]==x) return fa[x];else return fa[x] = getfa(fa[x]);}//判断祖先是否是同一个,即是否联通int same(int x,int y){return getfa(x)==getfa(y);}//合并两棵树void merge(int x,int y){int fax=getfa(x),fay=getfa(y);fa[fax]=fay;}int main(){int i;cout<<"请输入顶点数目和边数目:"<<endl;cin>>n>>m;//n为点数,m为边数//输出顶点信息cout<<"各个顶点值依次为:"<<endl;for(i=0;i<n;i++){fa[i]=i;if(i!=0)cout<<fa[i]<<" ";}cout<<endl;cout<<"请输入边的信息(例子:1 4 5 从顶点1到顶点4的边权为5)"<< endl;for(i=1;i<=m;i++)cin>>e[i].fm>>e[i].to>>e[i].dist;//用边集数组存放边,方便排序和调用sort(e+1,e+m+1,cmp); //对边按边权进行升序排序int rst=n,ans=0;//rst表示目前的点共存在于多少个集合中,初始情况是每个点都在不同的集合中for(i=1;i<=m && rst>1;i++){int x=e[i].fm,y=e[i].to;if(same(x,y)) continue;//same函数是查询两个点是否在同一集合中else{merge(x,y);//merge函数用来将两个点合并到同一集合中rst--;//每次将两个不同集合中的点合并,都将使rst值减1ans+=e[i].dist;//这条边是最小生成树中的边,将答案加上边权}}cout<<ans;return 0;}五、测试数据和相应的最小生成树Input:6 101 2 61 3 11 4 52 3 52 5 63 4 53 5 63 6 44 6 25 6 6Putout:18生成树为:七、思考题1、微软面试题一个大院子里住了50户人家,每家都养了一条狗,有一天他们接到通知说院子里有狗生病了,并要求所有主人在发现自己家狗生病的当天就要把狗枪杀掉。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五最小生成树
一、需求分析
1、本程序の目の是要建设一个最经济の网,,输出相应の最小生成树。
在这里都用整型数来代替。
2、测试数据
见下程序。
二、概要设计
主程序:
int main()
{
初始化;
while (条件)
{
接受命令;
处理命令;
}
return 0;
}
三、详细设计
#include<iostream>//头文件
using namespace std;
#define MAX_VERTEX_NUM 20//最大结点数
#define MAX 200
typedef struct Close//结构体
{
char adjvex;
int lowcost;
}Close,close[MAX_VERTEX_NUM];
typedef struct ArcNode
{
int adjvex;
ArcNode *nextarc;
int info;
}ArcNode;
typedef struct VNode
{
char data;
ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct
{
AdjList verties;
int vexnum,arcnum;
}ALGraph;
ALGraph G;//对象G
int LocateVek(ALGraph ,char );//返回结点位置
int minimum(close);//返回最小数
void MinSpanTree_PRIM(ALGraph,char);//最小生成树
void Create(ALGraph &);//创建邻接表
int main()
{
char a;int i=1;
Create(G);
/*for(int i=1;i<=G.vexnum;i++)
{
for(s=G.verties[i].firstarc;s!=NULL;s=s->nextarc)
cout<<G.verties[i].data<<"---"<<G.verties[s->adjvex].data<<"===="<<s->info<<endl; }*/
while(i)
{
cout<<"输入起点 : ";
cin>>a;
MinSpanTree_PRIM(G,a);
cout<<"如果结束输入'0',否则输入'1':";
cin>>i;
}
return 0;
}
int LocateVek(ALGraph G,char u)
{
int i;
for(i=1;i<=G.vexnum;i++)
if(u==G.verties[i].data)
return i;
return -1;
}
int minimum(close m)//返回最小数
{
int i=0,j,n=200;
for(i=1;i<=G.vexnum;i++)
if(m[i].lowcost<n&&m[i].lowcost!=0)
{
n=m[i].lowcost;
j=i;
}
return j;
}
void MinSpanTree_PRIM(ALGraph G,char u)
{
int j,k,a;
close closedge;ArcNode *s,*p,*q;
for(j=1;j<=MAX_VERTEX_NUM;j++)
closedge[j].lowcost=MAX;//把所有值都赋为最大
k=LocateVek(G,u);
for(j=1;j<=G.vexnum;j++)
if(j!=k)
{
closedge[j].adjvex=u;
for(s=G.verties[k].firstarc;s!=NULL;s=s->nextarc)
if(j==s->adjvex)
{closedge[j].lowcost=s->info;
break;
}
}
closedge[k].lowcost=0;
cout<<"最小生成树 : "<<"{";//查找并输出最小生成树
for(j=1;j<G.vexnum;j++)
{
k=minimum(closedge);
cout<<"("<<closedge[k].adjvex<<","
<<G.verties[k].data<<")";
closedge[k].lowcost=0;
for(int i=1;i<=G.vexnum;i++)
{
for(p=G.verties[k].firstarc;p!=NULL;p=p->nextarc)
if(p->info<closedge[i].lowcost&&i==p->adjvex)
{
closedge[i].adjvex=G.verties[k].data;
closedge[i].lowcost=p->info;
}
}
}cout<<"}"<<endl;
cout<<"边及对应权值: "<<endl;//输出边及对应权值
for(j=G.vexnum;j>=1;j--)
{
if(closedge[j].lowcost==0&&G.verties[j].data!=u)
{ cout<<"("<<closedge[j].adjvex
<<","<<G.verties[j].data
<<") ==";
a=closedge[j].adjvex;
for(q=G.verties[j].firstarc;q!=NULL;q=q->nextarc)
if(a-64==q->adjvex)
cout<<q->info<<endl;
}
}
}
void Create(ALGraph &G)
{
int i,j,k,x;
char a,b;ArcNode *s;
cout<<"输入顶点数(1-20):";
cin>>G.vexnum;
cout<<"输入边数:";
cin>>G.arcnum;
cout<<"输入顶点信息:"<<endl;
for(i=1;i<=G.vexnum;i++)
{
cin>>G.verties[i].data;
G.verties[i].firstarc=NULL;
}
for(i=1;i<=G.arcnum;i++)
{
cout<<"输入相邻两结点和权值 ";
cin>>a>>b;cin>>x;
j=a-64;k=b-64;//将字符型转化成整数型
s=new ArcNode;
s->info=x;
s->adjvex=k;
s->nextarc=G.verties[j].firstarc;
G.verties[j].firstarc=s;
s=new ArcNode;
s->info=x;
s->adjvex=j;
s->nextarc=G.verties[k].firstarc;
G.verties[k].firstarc=s;
}
}
四、调试分析
1、在写程序时遇到很多有关专业名词のC语言编译,没有完全套用书上の固有解释,而是按照自己有限の英语词汇の理解去编译の。
2、通过求最小生成树,进一步掌握了图の含义。
五、运行结果
六、实验环境
(1)Windows XP系统下
(2)编程环境:VC6.0++ ,TC2.0
七、实验体会
通过此实验,通过求最小生成树,进一步掌握了图の含义。
知道了普里姆算法。
通过本次课程设计,锻炼了我们の实际操作能力,培养了我们严密の思维和严谨の态度。