网站大量收购独家精品文档,联系QQ:2885784924

最优布线问题.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最优布线问题

滨江学院 《数据结构课程设计》 报告 院 系 计算机系 专 业 软件工程 学生姓名 刘宏光 学 号 20112344916 成 绩 二O一三 年 11 月 30 日 目录 设计目的------------------------------------1 需求分析------------------------------------1 程序流程图----------------------------------1 设计内容------------------------------------2 软件测试------------------------------------5 设计总结------------------------------------7 源程序--------------------------------------8 一.需求分析 1.如何将问题抽象成数据结构类型。 2如何选择存储结构去表示一个带权网络。 3.如何在所选存储结构下输出这个带权网络。 4. 如何计算N台计算机之间的最小生成树,即连接N个计算机的最短路径,核心是Prim算法。 5.如何输入N个计算机间连接费用的邻接矩阵,即所需数据,可以由键盘输入和文件读入。 6.如何输出最小生成树的边和权值,及其表示方式,可以用控制台输出或文件输出。 二.概要设计 此问题的关键在于如何实现Prim算法,实现的过程中如何得到构成最小生成树的所有顶点,此外输入输出格式也是一个关键问题所在。 Prim算法的基本思想:假设N=(V,{E})是连通网,TE是N上最小生成树中边的集合。算法从U={u0}( u0∈V),TE={}开始,重复执行下述操作:在所有u∈U,v∈V-U的边(u,v)∈E中找一条代价最小的边(u0,v0)并入集合TE,同时v0并入U,直至U=V为止。此时TE中必有n-1条边,则T=(V,{E})为N的最小生成树。 本实验是用文件进行输入、输出,其格式为: 输入文件:第一行为整数n(2=n=100),表示计算机的数目。此后的n行,每行n个整数。第x+1行y列的整数表示直接连接第x台计算机和第y台计算机的费用。 样例输入: 3 0 1 2 1 0 1 2 1 0 输出文件:直接输出连接N台计算机花费的最小费用 样例输出: 2(表示连接1和2,2和3,费用为2) 三.详细设计 定义一个权值的最大值: #define infinity 1000000 图的最大顶点数为30 #define max_vertexes 30 定义邻接矩阵,即边表,Graph是以以邻接矩阵存储的图类型 typedef int Graph[max_vertexes][max_vertexes]; 通过邻接矩阵的建立,可以将任意两点的权值存入其中,便于进行各边的权值的比较修改,在Prim算法中,为实现这个算法需附设一个辅助数组closeset,以记录从U到V-U具有最小代价的边,对每个顶点vi∈V-U,在辅助数组中存在一个相应分量closeset[i-1],他包括两个域,其中lowcost存储该边上的权值。显然, closedge[i-1].lowcost=Min{cost(u,vi)| u∈U} 从算法可以看出每加入一个顶点到U中,closedge数组都会发生相应的变化。 程序模块之间的调用:在主函数中调用邻接矩阵的初始化函数,邻接矩阵的生成函数,Prim算法的函数,图的构造函数,输出函数。邻接矩阵的生成函数主要解决的是边的信息存储问题,而Prim算法的函数是解决计算出最小生成树的功能。 下面是整个程序的运行流程: 四.调试分析 调试过程中遇到了一系列问题,比如说与预定的输入输出格式不相同。其中输入文件中第一个数字代表计算机个数,要先提取出来后,才能将剩下的数据赋值给邻接矩阵,不注意的话容易搞错。 本题采用Prim算法,它的时间复杂度是O(n2),构造最小生成树的另一个算法是Kruskal算法。当图的边数是e是,时间复杂度为O(eloge)。显然,当en2时,Prim算法效率比Kruskal高,相反,Kruskal算法比Prim算法好的多。 五.用户使用说明 1.工程下的输入文件wire.in.txt负责数据的输入,运行程序前需要将数据保存在其中,数据格式为:第一行为整数n(2=n=100),表示计算机的数目。此后的n行,每行n个整数

文档评论(0)

zhanghc + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档