- 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
班 级 计科***
姓 名 ***
学 号 *********
指导教师 *****
起止时间
2011 年 2 学期
一.实习目的通过本些实习,了解并初步掌握设计、实现较大系统的完整过程,包括需求分析、系统设计、模块划分、编码选择、系统集成、以及程序调试,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用程序开发打好坚实的基础。
二.问题描述(具体任务)
设计、实现一个城市的居民区之间管道铺设方案的咨询程序,为用户提供一种最佳的管道铺设方案。
三.需求分析
该程序所做的工作的是模拟城市管道铺设方案设计,为用户提供一种最佳决策的铺设方案。此程序规定:
在程序中输入居民区名称(节点名称)时,可以输入数字和个字母的字符串;输入连通两居民区名称时需输入一个字符型数据;输入两居民区名称之间距离(两结点之间权值)时需输入一个整型数据。
程序的输出信息主要是:管道铺设方案中最佳的铺设方案。
程序的功能包括:提供对城市居民区(节点)信息的编辑,提供一种最佳决策:能到达所有居民区(节点),且代价最小。
四.算法设计思想及流程图 可以用连通网来表示n个居民区间可能铺设的管道,其中网的顶点表示居民区,边表示居民区之间的线路,赋于边的权值表示相应的代价,对于n个顶点的连通网可以建立许多不同的生成树,每一颗生成树都可以是一个管道网,现在,我们要选择这样一个生成树,也就是使总的耗费最小。这个问题就是构造连通网的最小代价生成树(Minimum Cost Spanning Tree)(简称为最小生成树)的问题。一棵生成树的代价就是树上各边的代价之和。 普里姆(Prim)算法是一个利用MST性质构造最小生成树的算法,其时间复杂度为O(n*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,{TE})为N的最小生成树。
五.C语言源代码
#includestdio.h
#includestring.h
#includestdlib.h
#includemalloc.h
#define MAX 20 //结点最大数
#define MAX_VERS 20 //弧最大数
#define INFINITY 32767
int HaveData=0; //标志位,表示是否有数据
typedef struct{
char *vexs[MAX];
int vexnum,arcnum;
int arcs[MAX][MAX]; //邻接矩阵
}MGraph;
typedef struct{
int adjvex;
int lowcost;
}Close[MAX_VERS];
int Locate(MGraph G, char *a) //查找结点位置
{
for(int i=0;iG.vexnum;i++)
if(strcmp(G.vexs[i],a)==0)
return i;
return 0;
}
void Create(MGraph G) //按用户输入对图进行初始化
{
system(cls);
printf(现在开始创建图\n);
int i,weigh,v1,v2;
char *ch1,*ch2;
ch1=(char *)malloc(sizeof(char)*5);
ch2=(char *)malloc(sizeof(char)*5);
printf(请输入居民区(节点)个数,边数,逗号隔开,节点和弧数应大于1!);
scanf(%d,%d,G.vexnum,G.arcnum);
getchar();
for(i=0;iG.vexnum;i++)
{
printf(\n\t请输入第%d个居民区(节点)!,i+1);
G.vexs[i]=(char *)malloc(sizeof(char)*5);
scanf(%s,G.vexs[i]);
getchar();
}
for(i=0;iG.vexnum;i++
原创力文档


文档评论(0)