- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Prim算法最小生成树C语言
最小生成树
一 目的
给定一个地区的n个城市间的距离网,用Prim算法建立最小生成树,并计算得到的最小生成树的代价。
二 需求分析
(1)城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价;
(2)表示城市间距离网的邻接矩阵(要求至少6个城市,10条边);并且利用文件对数据进行提取。
(3)输出最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。
(4)采用模块化设计;
三 概要设计
1、相关定义以及算法概述
(1)最小生成树的定义: 假设一个单位要在n个办公地点之间建立通信网,则连通n个地点只需要n-1条线路。可以用连通的无向网来表示n个地点以及它们之间可能设置的通信线路,其中网的顶点表示城市,边表示两地间的线路,赋于边的权值表示相应的代价。对于n个顶点的连通网可以建立许多不同的生成树,每一棵生成树都可以表示一个通信网。其中一棵使总的耗费最少,即边的权值之和最小的生成树,称为最小生成树。
(2)普里姆(Prim)算法即是利用MST性质构造最小生成树的算法。算法思想如下: 假设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,{TE})为N的最小生成树。
2、函数设计
函数名 函数参数 返回值 功能 main 无 无 系统主函数
输入路径信息 Prim 无向图邻接矩阵
路径数目 代价 Prim算法实现
四 详细设计
1、mian函数
mian函数是一个程序的入口MAXCOST (0x7fffffff)表示。
例如:
A B C A MAXCOST 2 3 B 2 MAXCOST 1 C 3 1 MAXCOST
流程:
①初始化所有路径为无穷大
②获取城市和城市间通路路径的数目
③获取边信息
④将边信息对称存储在二维数组里,则形成邻接矩阵
⑤求解最小生成树(调用Prim函数)
⑥输出最小权值和
2、Prim函数
Prim函数的功能用于Prim算法的实现,也就是求解最小树并返回该最小生成树的总代价。
在函数中:
数组BianQuan记录以i为终点的边的最小权值,当BianQuan[i]=0时表示终点i加入生成树
数组QiDian记录对应BianQuan[i]的起点,当QiDian[i]=0时表示起点i加入生成树。
流程:
①默认选择1号节点加入生成树,找出与它的所有通路,更新相应数组。
②找出最小边权的路径进行输出,更新相应数组。
③把步骤②输出的路径的终点作为新的起点,找到他所有通路(不包括已经加入生成树的结点),更新相应数组。
④同步骤②
⑤跳转到步骤②,直到所有结点都加入生成树。
⑥返回代价,结束。
五 调试分析
起初在编写程序时,没考虑城市与城市之间无通路的情况,导致当程序输入数据中每个城市都对每个城市有通路时运行正常,而当输入数据某个城市对某个城市之间无通路时运行错误,通过请教其他同学,我发现了这个问题,并通过在建立邻接矩阵时初始化所有路径为最大值解决了它。
六 测试结果
假设有一城市分布图如下图
输入数据:7 11A B 7A D 5B C 8B D 9B E 7C E 5D E 15D F 6E F 8E G 9F G 11
输出:
A - D : 5D - F : 6A - B : 7B - E : 7E - C : 5E - G : 9Total:39
《软件技术 》课程设计
4
文档评论(0)