- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构
课程设计扌艮告
设计题目:管道铺设施工的最佳方案选择
年
级 2009
班
级 计科***
姓
名 ***
学
? 1
£ ■ rTw rr^
指导教师 *****
起止时间
2011年2学期
一.实习目的
通过本些实习,了解并初步掌握设计、实现较大系统的完整过程,包括需求分析、系统 设计、模块划分、编码选择、系统集成、以及程序调试,熟练常握数据结构的选择、设 计、实现以及操作方法,为进一步的应用程序开发打好坚实的基础。
二?问题描述(具体任务)
设计、实现一个城市的居民区之间管道铺设方案的咨询程序,为用户提供一种 最佳的管道铺设方案。
需求分析
该程序所做的工作的是模拟城市管道铺设方案设计,为用户提供一种最佳决策的 铺设方案。此程序规定:
在程序屮输入居民区名称(节点名称)时,可以输入数字和个字母的字符串; 输入连通两居民区名称时需输入一个字符型数据;输入两居民区名称Z间距 离(两结点之I可权值)吋需输入一个整型数据。
程序的输出信息主要是:管道铺设方案中最佳的铺设方案。
程序的功能包扌舌:提供对城市居民区(节点)信息的编辑,提供一种最佳决策: 能到达所有居民区(节点),且代价最小。
算法设计思想及流程图
可以用连通网來表示n个居民区间可能铺设的管道,其中网的顶点表示居民区,边 表示居民区之间的线路,赋于边的权值表示相应的代价,对于n个顶点的连通网可以建立 许多不同的生成树,每一颗生成树都可以是一个管道网,现在,我们要选择这样一个生成 树,也就是使总的耗费最小。这个问题就是构造连通网的最小代价生成树(Minimum Cost SpanningTree)(简称为最小生成树)的问题。一棵生成树的代价就是树上各边的代价之和。
普里姆(Prim)算法是一个利用MST性质构造最小生成树的算法,其时间复杂度为 O(n*n)o适合求稠密图。
假设N=(V,{E})是连通网,TE是N是最小生成树屮边的集合,算法从U={ uo)( uoe V),TE={}开始,重复执行一述操作:在所有ueu, veV-U的边(u,v) uE中找一条代价最 小的迦u(),vo)并入集合TE,同吋vo并入U,直至U二V为止,此吋TE中必有n-1条边, 则T=(V,{TE})为N的最小生成树。
C语言源代码
#includestdio.h
includestring.h
#includestdlib.h
includemalloc.h
#define MAX 20 〃结点最大数
#define MAX.VERS 20 〃弧最大数
#define INFINITY 32767
int HaveData=O; 〃标志位,表示是否有数据
typedef struct}
char *vexs[MAX];
int vexnum,arcnum;
int arcs[MAX][MAX]; 〃邻接矩阵
JMGraph;
typedef struct}
int adj vex; int lowcost;
}Close[MAX_VERS];
int Locate(MGraph G, char *a) //查找结点位置
{
for(int i=0;iG.vexnum;i++)
if(strcmp(Gvexs[i],a)==O)
return i;
return 0;
}
void Create(MGraph G) //按用户输入对图进行初始化
{
systemCcls);
printfC现在开始创建图\n”);
int i,weigh,vl,v2;
char *chl,*ch2;
ch 1 =(char *)malloc(sizeof(char)*5);
ch2=(char *)malloc(sizeof(char)*5);
printfC1请输入居民区(节点)个数,边数,逗号隔开,节点和弧数应大于1 !“); scanf(%d,%d\G.vexnum,G.arcnum);
getchar();
for(i=0;iG.vexnum;i++)
{
printf(u\n\t请输入第%d个居民区(节点)!“,i+1);
G.vexs[i]=(char *)malloc(sizeof(char)*5);
scanf(H%s,Gvexs[i]);
getchar();
}
for(i=0;iGvexnum;i++)
for(int j=0;jG.vexnum;j++) G.arcs[i][j]二INFINITY; 〃初始化所有边长为无穷
for(i=0;iG.arcnum;i++)
{
printf(H\n\t请输入第%d个弧的头:”,i+1); scanf(%s,chl);
printf(u\t请输入第%d个弧的尾:”,i+1);
scanf(”%s”,ch2);
printf(°
原创力文档


文档评论(0)