2020年新版管道铺设问题.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三:管道铺设施工的最佳方案 问题描述 实验题目: 需要在某个城市n个居民小区之间铺设煤气管道, 则在这n个居民小区之间只需要铺设 n-1 条管道铺设n-1条管道即可。假设任意两个小区之间则可以铺设管道, 但由于地理环境不同, 所需要的费用也不尽相同。选择最优的方案能使总投资尽可能小, 这个问题即为求无向网的 最小生成树。 基本要求: 在可能假设的m条管道中,选取n-1条管道,使得既能连通n个小区,又能使总投资最小。 每条管道的费用以网中该边的权值形式给出,网的存储采用邻接表的结构。 测试数据: 使用下图给出的无线网数据作为程序的输入,求出最佳铺设方案。 需求分析 程序所能达到的基本可能: 在某个城市n个居民小区之间铺设煤气管道, 则在这n个居民小区之间只需要铺设 n-1条管 道铺设n-1条管道即可。假设任意两个小区之间则可以铺设管道, 但由于地理环境不同, 所 需要的费用也不尽相同。选择最优的方案能使总投资尽可能小,在可能假设的 m条管道中, 选取n-1条管道,使得既能连通 n个小区,又能使总投资最小。 输入输出形式及输入值范围: 程序运行后,显示提示信息:请输入顶点数和边数 (输入格 式为:顶点数,边数)之后程序从文件名为” C:\\data.txt 读入顶点信息和边的信息,之后 显示提示信息输入开始节点,执行生成最小树程序,输出生成的最小树信息。 测试数据要求:顶点数边数为整数,顶点信息为大写字母,边的权值为浮点型, C:\\data.txt 文件内容为:ABCDEFGHI 1 2 32.8 2 3 5.9 1 3 44.6 3 4 21.3 4 5 67.3 4 6 98.7 5 6 85.6 5 7 10.5 3 7 56.4 6 9 79.2 7 8 52.5 1 8 12.1 8 9 8.7 1 9 18.2 3 5 41.1 概要设计 所用到得数据结构及其 ADT typedef struct node // 边表结点 { int NO; II 邻接点域; vertexType adjvex; EdgeType info; // 权值 struct node *n ext; // }EdgeNode; typedef struct vnode // { vertexType vertex; // EdgeNode *firstedge; // }VertexNode; 指向下一个邻接点的指针域 顶点表节点 顶点域 编表头指针 typedef struct // { VertexNode adjlist[MaxVertexNum]; int n,e; // }ALGraph; // ALGraph 基本操作:ALGraph * CreateALGraph() 主程序流程及其模块调用关系 邻接表 顶点数和边数 是以邻接表方式存储的图类型 // 建表 1)主程序模块 开始 显示主界面 建表 生成最小树 建表模块 ALGraph * CreateALGraph() 最小生成树模块 void tree(ALGraph *G,i nt m) 开始 开始 i++ i++ sum=0; low[m]=0; visited[m]=0; i=1 ■ i=G-n s N s=G- ? adjlist[m].first edge; 1 r low[i]=1000; teed[i]=m; N Ls!=NULL i=1 i++ N iG-n i=1 结束 i=G-n 十 low[s-NO]=s- info; s=s-next; 理 Y f min=1000;j=1 r * jv=G-n sum+=min; visited[k]=0; s=G-adjlist[k].firstedge 输出边顶点信息 visited》。lo w[j]min s!=NULL i++ min=low[j]; k=j;j++ (visited[s- NO]0s- infolow[s-NO] low[s-NO]=s- info; teed[s-NO]=k; s=s-next; 函数调用关系图 四、详细设计 1.实现每个操作的伪码,重点语句加注释 建表模块 ALGraph * CreateALGraph() // 建表 { int i,j,k; float m; FILE *fp; EdgeNode *s,*t; ALGraph *G; fp=fope n( C:\\data.txt,广);// 打开文件 if(fp==NULL)〃 未找到文件 { prin tf(Ca nnt open the file!\n ”); exit(1); } G=(ALGraph *)malloc(sizeof(ALGraph)); printf(” 请输入顶点数和边数(输入格

文档评论(0)

cooldemon0602 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档