下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算法分析与设计实验报告第 一 次附加实验姓名学号班级时间12.12上午地点工训楼309 实验名称贪心算法实验(最小生成树)实验目的通过上机实验,要求掌握贪心算法的思想,利用prim算法求解最小生成树并实现。实验原理设G=(V,E)是连通带权图,V=1,2,n。构造G的最小生成树的Prim算法的基本思想是:首先置S=1,然后,只要S是V的真子集,就作如下的贪心选择:选取满足条件iÎS,jÎV-S,且cij最小的边,将顶点j添加到S中。这个过程一直进行到S=V时为止。在这个过程中选取到的所有边恰好构成G的一棵最小生成树。实验步骤(1)用邻接矩阵表示无向图,并进行初始化,同时选择
2、源点放在集合s中;(2)选取候选集中距离最短的顶点,把其加入终点集合中;(3)以该顶点为新考虑的中间顶点,修改候选集中个顶点距离,若经过该点后,各点到达源点距离比原来距离短,则修改距离;(4)重复以上2、3步,直到所有候选集中都被加入到终点集中。关键代码template<class Type>/参数为结点个数n,和无向带权图中各结点之间的距离cN+1void Prim(int n,Type cN+1)Type lowcostN+1; /记录cjclosest的最小权值int closestN+1; /V-S中点j在中的最临接顶点bool sN+1; /标记各结点是否已经放入集合s中
3、s1=true;/初始化si,lowcosti,closestifor(int i=2;i<=n;i+)lowcosti=c1i;closesti=1;si=false;for(int i=1;i<n;i+)Type min=inf;int j=1;for(int k=2;k<=n;k+)/找出V-S中是lowcost最小的顶点jif(lowcostk<min)&&(!sk)/如果k的lowcost比min小并且k结点没有被访问min=lowcostk;/更新min的值j=k;cout<<j<<' '<<
4、;closestj<<endl;/输出j和最邻近j的点sj=true;/将j添加到集合s中for(int k=2;k<=n;k+)if(cjk<lowcostk)&&(!sk)/s集合放进j后更新各结点的lowcost的值lowcostk=cjk;closestk=j;测试结果输入较小的有向带权图结果: 实验分析再求最小生成树的实验中,有两种算法:一种是Prim算法,一种是Kruskal算法。在两种算法中,我们可以比较Prim算法,是通过集合S中的点来更新另一个集合的点距这个已经生成的树的最短距离,而Kruskal算法是每次都选择最短的边加入到生成树集合
5、中,其实两种算法其思想是不同的,所以两种算法的时间复杂度也是不同的,Prim算法的时间复杂度是O(n2),而Kruskal算法的时间复杂度是O(nlogn),相比来讲,在时间上Kruskal更好一点。实验心得最小生成树在之前的数据结构中也是学过的,可是当时学的时候,也许是不够努力,学的模模糊糊的,也没有将Prim算法和Kruskal算法搞清楚,只是能简单的利用知识做题,却不能很清楚地讲明白这两种算法的原理差别,更别说是编程设计了,那就根本想都不要想,完全不知所措,在之前的数据结构中,很多涉及到图的实现,尤其那些代码实在是晦涩难懂,搞得我实在不想学习,后来在算法课上学到的东西就有点不同了,也许是
6、经过时间的打磨,感觉到现在的代码没有那么难懂了,也终于弄明白了两者的区别,感觉好多了。实验得分助教签名附录:完整代码(贪心法)/贪心算法 最小生成树prim算法#include<iostream>#include<fstream>#include<string>#include<time.h>#include<iomanip>using namespace std;#define inf 9999; /定义无限大的值const int N=6;template<class Type> /模板定义void Prim(int
7、n,Type cN+1);int main()int cN+1N+1; cout<<"连通带权图的矩阵为:"<<endl;for(int i=1;i<=N;i+) /输入邻接矩阵for(int j=1;j<=N;j+) cin>>cij;cout<<"Prim算法最小生成树选边次序如下:"<<endl;clock_t start,end,over; /计算程序运行时间的算法start=clock();end=clock();over=end-start;start=clock();P
8、rim(N,c); /调用Prim算法函数end=clock();printf("The time is %6.3f",(double)(end-start-over)/CLK_TCK); /显示运行时间cout<<endl;system("pause");return 0;template<class Type>/参数为结点个数n,和无向带权图中各结点之间的距离cN+1void Prim(int n,Type cN+1)Type lowcostN+1; /记录cjclosest的最小权值int closestN+1; /V-S中
9、点j在s中的最临接顶点bool sN+1; /标记各结点是否已经放入S集合¦s1=true;/初始化si,lowcosti,closestifor(int i=2;i<=n;i+)lowcosti=c1i;closesti=1;si=false;for(int i=1;i<n;i+)Type min=inf;int j=1;for(int k=2;k<=n;k+)/找出V-S中是lowcost最小的顶点jif(lowcostk<min)&&(!sk)/如果k的lowcost比min小并且k结点没有被访问min=lowcostk; /更新min的值j=k;cout<<j<<' '<<closestj&l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CRRA 0301-2023绿色再生塑料 产销监管链
- T/TMAC 231-2025电子器件用金刚石热沉片
- T/GDLC 022-2024温室气体 产品碳足迹 量化方法与要求 凝胶糖果
- T/CI 479-2024区域复合水灾害特征变异识别规程
- T/CABC 13-2024产品数字护照 动力蓄电池唯一编码
- T/CRHA 088-2024病理免疫组织化学检测质控品要求
- 2025~2026学年黑龙江齐齐哈尔市龙江县人教版上册第一次学情自测教学质量抽测六年级数学试卷【附答案】
- 2025-2026学年吉林省榆树市初中政治八年级期末上册自测高频题(附答案)
- 2027届江苏省南通市田家炳中学七年级数学第一学期期末检测模拟试题含解析
- 前台接待访客登记、引导与通知流程方案
- 2026年皖豫天一大联考高三10月英语试题(含答案)
- 2026-2027学年四年级上学期统编版语文单元练习卷 第一单元-1(含答案)
- 【应用方案】2026智慧农业农业机器人智能感知与精准作业一体化设计方案
- 高标准农田建设项目初步设计技术规程(NYT 5490-2026 )
- CSCO非小细胞肺癌诊疗指南(2026版)
- 压缩空气储能地下洞库施工方案
- T∕CCEAS008-2026 建设工程造价咨询成果文件质量标准
- (2026年)护理查对制度课件
- 第10课《养成遵纪守法好习惯》第1框《增强遵纪守法意识》-【中职思政】《职业道法与法治》课件(高教版2023基础模块)
- 口腔侵入性操作目录
- 班主任基本功大赛-情景答辩23题(中学组)
评论
0/150
提交评论