- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法
课程设计报告
课程设计题目: 最小生成树问题
专业班级: 信息与计算科学1001班
姓 名: 学 号:100701114
设计室号: 理学院机房
设计时间: 2011
指导教师: 成 绩:
一、摘要:
随着社会经济的发展,人们的生活已经越来越离不开网络,网络成为人们社会生活的重要组成部分。我们希望拥有一个宽松的上网环境,以便更好的进行信息的交流,在此我们有必要提升我们的网络传播速度。从某种程度上来说网络传播速度代表着一个国家网络化程度的高低。
为了解决网络传输速度的问题我们希望在各个城市之间多架设一些通信网络线路,以缓解网络不够流畅不够便捷的问题。而在城市之间架设网络线路受到资金因素等的限制,我们希望找到一条捷径这样我们即达到了连接了各个城市网络的目的又节省了建设成本。
通过以上的分析我们得出解决此问题的关键在于找到一个短的路径完成网络的假设。在此我们想将各个城市抽象成为一个个节点,连接各个城市之间的网络作为连接各个节点的边。于是我们就将城市的空间分布抽象成为一个网络图,再将各条边的距离抽象成为各节点之间的权值。在原来的基础上建立一个带有权值的网络图。于是原有的问题就转化为找图的最小生成树问题。
我们利用普利姆算法和卡鲁斯卡尔算法找到我们所需要的最小的生成树。
二、问题分析
在n个城市间建立通信网络,需架设n-1条路线。求解如何以最低的经济代价建设此通信网,这是一个最小生成树问题。我们可以利用普利姆算法或者克鲁斯卡尔算法求出网的最小生成树,输入各城市的数目以及各个城市之间的距离。将城市之间的距离当做网中各点之间的权值。
三、实现本程序需要解决的问题
(1)如何选择存储结构去建立一个带权的网络;
(2)如何在所选存储结构下输出这个带权网络;
(3)如何实现普利姆算法的功能;
(4)如何从每个顶点开始找到所有的最小生成树的顶点;
(5)如何输出最小生成树的边及其权值
此问题的关键就是利用普利姆算法,找到一个最小上的生成树,在一个就是输出我们所需要的信息,在此我们将各个城市看做是网中的各个顶点城市之间的距离看做是个顶点之间的权值。现在我们问题做如下的分析:
这个问题主要在于普利姆算法的实现。我们将各个城市的空间分布抽象成一个带有权值的网络,这个权值就是任意两个城市之间,各个城市就看做是网络的各个顶点。
我们建立的输入的数据格式为:首先提示输入带权的顶点数目,我定义为整形的数据型,然后输入每条边的信息,即边的两个顶点之间的权值,以十进制整数类型数据,这样我们就建立了一个带权的网络。
问题的输出我是将我们所得到的最小生成树的路线输出出来。
题目的要求就是我们在n个城市之间架设网络得到的最为经济的架设方法,我们进行以上的工作就是在找我们所需要的最小生成树,已解决我们的问题。
四、算法思想
普利姆算法求最小生成树的主要思想
假设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的最小生成树。
对于最小生成树问题:最小生成树是指在所有生成树中,边上权值之和最小的生成树,另外最小生成树也可能是多个但是他们权值之和是相等的。
五、程序设计流程图:
输入需要架设网络的城市的数目
输入需要架设网络的城市的数目
输入需要架设网络的各个城市之间的距离
输入需要架设网络的各个城市之间的距离
找到一个最小的生成树
找到一个最小的生成树
输出一个最小的生成树这个最小的生成树就是一个架设网络的最优解
输出一个最小的生成树这个最小的生成树就是一个架设网络的最优解
六、模块划分
(1)预处理
#includestdio.h
#define maxvertexnum 20
#define maxedgenum 40
typedef int adjmatrix[maxvertexnum][maxvertexnum];
(2)定义一个储存节点信息的结构体
struct edgenode
{
int frontvex;
int rearvex;
int weight;
};
typedef edgenode adgeset[maxedgenum]
文档评论(0)