贪心算法 动态规划算法 实验报告 程序.docxVIP

贪心算法 动态规划算法 实验报告 程序.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
贪心算法 动态规划算法 实验报告 程序

计算机算法课程实验报告每对结点间最短路径院系:计算机科学与技术班级:姓名:学号: U200814470 Part one贪心法实现最短路径一、实验目的设计一个C程序,实现求解单源点最短路径问题。二、实验要求本实验要求输出最短路径值以及最短路径三、实验内容与原理单源点最短路径问题,即,已知一个n结点有向图G=(V,E)和边的权函数c(e),求由某指定结点V0到其他各个结点的最短路径,这里还假定所有的权都是正的。为了制定产生最短路径的贪心算法,对于这个问题应该想出一个多级解决办法和一种最优的量度标准。方法之一是逐条构造这些最短路径,可以使用迄今已生成的所有路径长度之和作为一种量度,为了使这一量度达到最小,其单独的每一条路径都必须具有最小长度。使用这一量度标准时,假定已经构造了i条最短路径,则下面要构造的路径应该是下一条最短的最小长度路径。首先,生成从V0到所有其它结点的最短路径。然后生成一条到第二近结点的最短路径等等。四、程序流程图关键思想阐述:从v0开始,只通过S中的结点并且在S外的结点w初结束的最短路径可能会减小,即DIST(w)的值可能改变。如果长度改变了,则它必定是由一条从v0开始,经过u然后到w的跟段的路径所造成的。v0到y的路径以及u到w 的路径上的中间结点应全部在S中。而且,v0到u的路径必定是这样一条最短的路径,否则就不符合DIST(w)的定义英雌,可以得出结论,如果DIST(w)会减少,那是由于有一条从v0静u到w的更短的路,而从u到w的路径是边u,w.这条路径的长度是DIST(U)+C(u,w)。分析得到程序流程图如下:五、算法及程序说明本算法使用贪心法设计,生成从v0到所有其它结点的最短路径的贪心方法就是按照路径长度的非降次序生成这些路径。六、源程序/*单源点最短路径*/#includestdio.hint search(int*,int,int,int*,int);main(){ /*生成单源点最短路径的贪心算法*/int COST[7][7]={{0,20,50,30,200,200,200},{200,0,25,200,200,70,200},{200,200,0,40,25,50,200},{200,200,200,0,55,200,200},{200,200,200,200,0,10,70},{200,200,200,200,200,0,50},{200,200,200,200,200,200,0}}; /*COST[i][j]表示成本邻接矩阵,200表示无穷大*/ int front_point[7]={0,0,0,0,0,0,0};/*用来存放各结点的最短路径上的前一结点*/ int DIST[7];/*DIST[i]表示第i个结点到源结点的路径长度*/ int S[7];/*S中表示对其已经生成了最短路径的那些结点,S[i]=1表示第i个结点在S中,否则不在*/ int u,num,i,w,j,k; for(k=0;k7;k++){ /*j对应到其他所有点的最短距离*/ for(i=0;i7;i++){ front_point[i]=k; } for(i=0;i7;i++){ S[i]=0;/*初始状态时,所有结点均不在S中*/ DIST[i]=COST[k][i];/*各结点到源结点的最短路径的初始长度为它们的直接距离*/ } S[k]=1;/*将源结点放入S中*/ DIST[k]=0;/*自身到自身的路径为0*/ for(num=2;num=6;num++){ /*加入五个结点到S中,最后一个不需要*/ int min=32767; for(w=0;w=6;w++){ /*找出不在S的结点中到源结点直接距离最短的结点*/ if(!S[w]){ if(DIST[w]min){ min=DIST[w]; u=w; /*将所找结点位置赋值给u*/ } } } S[u]=1; /*将第u结点放入S中*/ for(w=0;w=6;w++){ /*加入u结点后,重新计算非S中结点的

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档