- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》
课程设计报告
(最小生成树问题)
1 课程设计的目的和意义
2 需求分析
3 系统(项目)设计
4 系统实现
5 系统调试
附录 源程序
1 课程设计的目的和意义
据《数据结构》课堂讲授及书本内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C及C++程序的经验;通过完成课程设计中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。“数据结构”作为计算机专业基础课,该课程的目标就是使学生学会如何从问题出发,分析数据,构造求解问题的数据结构和算法,培养学生有一定进行较复杂程序设计的能力。
本次课程设计的内容是用最小生成树的构造来表示城市间的最小代价即最小距离,最小生成树可以用连接矩阵和连接表表示,而它们的区别就是连接矩阵一般用来表示密集型的网络,连接表一般用来表示稀疏型的网络,连接矩阵是用数组来存储,连接了是用链表来存储的,比较复杂密集型的网络就网连接矩阵较适用了,设计中运用了Prim算法,“构造可以使n个城市连接的最小生成树”问题就是用连接矩阵和Prim算法处理的一个实际应用。通过这个题目的设计实例,了解了最小生成树的实际运用意义,也了解连接矩阵和连接表的相同与不同之处,进一步加深了对最小生成树结构和Prim算法的理解。
通过这次课程设计,一方面使学生加深对课内所学的有关数据的逻辑结构和存储表示、数据结构的选择和应用、算法的设计和时空分析等课程基本内容的理解,另一方面,使学生在程序设计方法(如抽象数据类型、结构化分析、模块化设计和结构化设计)、C和C++语言编程环境以及程序的调试和测试方面受到比较系统的严格的训练。
2 需求分析
题目:最小生成树的Prime算法实现(难度**)
要求:
先任意创建一个图;
用Prime算法,求出该图的最小生成树
。
3 系统(项目)设计
(包括总体设计和详细设计)
一. 设计思想及方案:
n个顶点的连通图应该至少有n-1条边,而生成树正好有n-1条边,所以生成树是对应的连通图的极小连通子图。带权的无向图,经过遍历得到的生成树也是带权的,最小生成树即权值最小的生成树。所以要求图的最小生成树,即只要求权值最小的极小连通子图。这实际上是求图的一个生成树。同时还要考虑造价最低这个条件。一棵树的权定义为它所含各边的权之和。一个连通网络的最小生成树是该图所有生成树中权最小的生成树普里姆算法(Prim)算法:设N=(V,{E})是连通图,TE是N上最小生成树中边的集合,U为V中具有最小生成树的顶点集合,初始时,TN为空,U={uo}( uo∈V),重复下叙操作:在所有u∈U、v∈V-U的边(u,v)∈E中找一条代价最小的边(u0 ,v0 )并入集合TE,同时v0 并入集合TE,同时, 直到U=V为止,此时TE必有n-1条边,且T=(V,{TE})为N的最小生成树。
二.模块的设计及介绍
(1). 主程序模块
void main(){
{
接受命令;
处理命令;
Coutendl””命令”=”是否继续?y/n””;
}
}
(2). 创建链接矩阵模块
int creatMGraph_L(参数){
for {
接受命令;
处理命令;
}
cout命令endl;
}
4 系统实现
各模块关键代码及算法的解释:
(1).主函数模块代码
{
algraph gra;
MGraph_L G;
int i,d,g[20][20];
char a=a;
d=creatMGraph_L(G);
vnode v;
coutendl注意:若该图为非强连通图(含有多个连通分量)时endl
最小生成树不存在,则显示为非法值endlendl;
cout…………………菜单……………………endlendl;
cout0、显示该图的邻接矩阵……………………endl;
cout1、最小生成树PRIM算法及代价…………………endl;
int s;
char y=y;
while(y=y)
{
cout请选择菜单:endl;
cins;
switch(s)
{
case 0:
cout邻接矩阵显示如下:endl;
ljjzprint(G);
break;
case 1:
for(i=0;i!=G.vexnum;++i)
for(int j=0;j!=G.vexnum;++j)
g[i+1][j+1]=G.arcs[i][j].adj;
coutprim:endl;
prim(g,d
文档评论(0)