Floyd算法在一类实际问题中的应用.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Floyd算法在一类实际问题中的应用   摘要:最短路径问题在图中是最吸引大家眼球的问题,既是图中的重点也是难点。该文分析了Floyd算法的基本思想,并以一个实际问题为例,论述了其在VC++中的具体实现。   关键词:Floyd算法;VC++;应用   中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)22-6227-02   Application of Floyd Algorithm in a Class of Practical Problems   WEI Lin-jing1,YUE Jian-bin2   (1.Information Science and Technology College, Gansu Agricultural University, Lanzhou 730070, China; 2.Lanzhou City College, Lanzhou 730070, China)   Abstract: Shortest path problem is the most attractive problem in the graph theory. Its not only of great priority, but also a difficult. This paper analyzes the basic idea of floyd algorithm,and discusses the realization in VC++ by a practical problem.   Key words: floyd algorithm; VC++; application   最短路作为图与网络技术研究中的一个经典问题一直在工程规划、地理信息系统、通信和军事运筹学等领域有着十分广泛的应用。顶点对之间的最短路径是指:对于给定的有向网G=(V,E),要对G中任意一对顶点有序对V、W(V≠W),找出V到W的最短距离和W到V的最短距离。   目前,关于最短路问题的研究已有较多结果,传统的最短路算法主要有 Floyd算法[1]和Dijkstra[2]算法等。其中,Dijkstra算法求解任意顶点对之间最短距离的方法是:轮流以每一个顶点为源点,重复执行算法n次,即可求得每一对顶点之间的最短路径,总的时间复杂度为O(n3)。   Floyd提出了另外一个求图中任意两顶点之间最短路径的算法,虽然其时间复杂度也是 O(n3),但其算法的形式更简单,易于理解和编程。   1弗洛伊德(Floyd)算法的基本思想   Floyd算法是通过权矩阵计算来实现的一种方法,其主要思想是从代表任意两个节点vi到vj距离的带权邻接矩阵 D(0)开始,首先计算D(1),即计算vi到vj经过一次经转的所有可能路径,经过比较后选出最短路,代替D(0)中对应的路径,迭代列出距离矩阵D(1),D(1)中各元素表示通过一次迭代后网络中任意两点间最短路,也即网络中任意两点之间直接到达或只经过一个中间点时的最短路。在此基础上依次计算D(2) ,D(3) ,…,D(k),D(k)中对应的元素表示任意两点间不经过中间点或最多允许经过2k-1个中间点时的最短路。当D(k+1) =D(k)时,表明得到的带权邻接矩阵D(k)就反映了所有顶点对之间的最短距离信息,,成为最短距离矩阵。其算法如下:   第一步,作初始距离矩阵D(0)=(dij(0)),其中:   ,其中(i,j=1,2,…,n);   第二步,构造迭代矩阵D(k)=(dij(k)),其中:   ;   第三步,若D(k+1)=D(k),迭代终止,否则,返回第二步。   2 问题的提出及求解   设计一个能够计算某城市任意两个院校间最短路距的查询器,院校间交通示意图见图1。要求系统应具备较好的容错与自动计算等功能。两个院校间最短路距是指从一个院校校门到另一个院校校门间的最短里程(单位:千米)。   在具体求解过程中,可以把一个学校所在位置作为一个始点,其他任何学校所处的位置都可能成为终点,即终点是任意的。由于Floyd算法是比较成熟的求非负权网络最短路问题的算法,且是一种多项式算法。在实现Floyd算法的过程中,核心步骤就是从未标记的点中选择一个权值最小的弧段,这是一个循环比较的过程。   利用VC++来求解本问题的过程如下。在VC++中运行程序, 为了避免∞在计算机中无法计算的问题,可以把∞改为100来计算(相对其他的数据来说,是比较大的),这样改动后,并不影响程序运行后所得到结果的正确性。   1) 初始化邻接矩阵和路径矩阵   #define N 20   #define INF 100   float cost[

文档评论(0)

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

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

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档