数据结构实验报告管道铺设问题

数据结构实验报告管道铺设问题

ID:34932060

大小:449.32 KB

页数:20页

时间:2019-03-14

数据结构实验报告管道铺设问题_第1页
数据结构实验报告管道铺设问题_第2页
数据结构实验报告管道铺设问题_第3页
数据结构实验报告管道铺设问题_第4页
数据结构实验报告管道铺设问题_第5页
资源描述:

《数据结构实验报告管道铺设问题》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、《计算机软件技术基础》实验报告I—数据结构实验三:管道铺设施工的最佳方案问题一、问题描述1.实验题目:需要在某个城市n个居民小区之间铺设煤气管道,则在这n个居民小区之间只需要铺设n-1条管道即可。假设任意两个小区之间都可以铺设管道,但由于地理环境不同,所需要的费用也不尽相同。选择最优的方案能使总投资尽可能小,这个问题即为求无向网的最小生成树。2.基本要求:在可能假设的m条管道中,选取n-1条管道,使得既能连通n个小区,又能使总投资最小。每条管道的费用以网中该边的权值形式给出,网的存储采用邻接表的结构。3.测试数据:使用下图给出的无线网数据作为程序的输入,求出最佳铺设方案。

2、右侧是给出的参考解。图1小区煤气管道铺设网及其参考解4.输入输出:从键盘或文件读入上图中的无向网,以顶点对(i,j)的形式输出最小生成树的边。二、需求分析1.本程序所能达到的基本可能:本程序用无向网表示各小区之间的管道铺设情况,结点表示小区位置,边表示铺设的管道,边的权值表示各段的费用。采用邻接表存储,输入无向网数据创建邻接表,通过普利姆算法求出最小生成树,即是最佳铺设方案。1.输入输出形式及输入值范围:根据提示输入总的边数,结点数。再根据提示输入各结点的信息即结点的名称,输入边的信息,即边的两个端点和该边的权值。输入后成功创建邻接表,自动输出所建立的邻接表和普利姆算法求

3、出的最小生成树。2.测试数据要求:使用下图给出的无线网数据作为程序的输入,求出最佳铺设方案。右侧是给出的参考解。输入结点数和边数:915根据提示分别输入九个结点的名称:ABCDEFGHI输入边的信息,即两个端点的名称及该边的权值:(AB32.8);(BC5.9);(CD21.3);(DE67.3);(AC44.6);(AH12.1);(AI18.2);(HI8.7);(HG52.5);(CG56.4);(CE41.1);(EF85.6);(DF98.7);(IF79.2);(EG10.5)输入完毕直接输出“建立的图邻接表表示为:0->8->7->2->1->2->0->2

4、->4->6->0->3->1->3->5->4->2->4->6->5->2->3->5->8->3->4->6->4->2->7->7->6->8->0->8->5->7->0”直接输出应用prime算法,得到的最小生成树的结果,用结点字母表示三、概要设计为了实现上述功能,该程序以邻接表存储的无向图模拟居民住宅的分布和住宅之间的管道,通过普利姆算法求最小生成树来求解管道最小花费。因此需要邻接表这一抽象数据类型来表示无向图。还需要普利姆算法求最小生成树。1.邻接表抽象数据类型定义ADT ALGraph{ 数据对象:D={ai,bi,ci

5、ai∈AdjList,bi∈in

6、t,ci∈int),i=1,2...,n,n≥0}:数据关系:R=∅基本操作:create(ALGraph*G)//建立无向图的邻接表存储voidprime(ALGraph*G,intfrom)//用普利姆算法求最小生成树}ADT ALGraph1.ADT的c语言形式说明:typedefstruct{AdjListadjlist;//邻接表intn,e;//顶点数和边数}ALGraph;//ALGraph是以邻接表方式存储的图类型voidcreate(ALGraph*G)//建立无向图的邻接表存储voidprime(ALGraph*G,intfrom)//用普利姆算法求最

7、小生成树3.本程序保护模块:主函数模块图模块4.普利姆算法分析(1)普利姆算法思想:普利姆算法的思想是:在图中人去一个定点k0作为开始点,令U={k0},W=V-U,其中V为图中所有顶点集,然后找一个顶点在U中,另一个顶点在w中的边中最短的一条,找到后,将该边作为最小生成树的树边保存起来,并将该边顶点全部加入U集合中,并从W中删除这些顶点,然后重新调整U中顶点到W中顶点的距离,使之保持最小,再重复此过程,直到W为空集。(2)算法过程描述:在图G=(V,E)(V是顶点,E是边)中,从集合V中任取一个顶点,如k0放入集合U中,这时,U={k0},集合T(E)为空。从k0出发寻

8、找与U中顶点相邻权值最小的边的另一顶点k1,并使k1加入U。即U={k0,k1},同时将该边加入集合T(E)中。重复(2),直到U=V为止。这时T(E)中有n-1条边,T=(U,T(E))就是一一颗最小生成树。5.主程序流程及其模块调用关系:(1)主程序流程:先提示用户输入相关数据:节点数,边数,各结点名称,各边两端名称和边的权值。创建邻接表存储无向图并输出这一邻接表。用普利姆算法求最小生成树:访问各节点,从已经访问过的节点和未访问过的节点组成的所有边中挑出权重最小的一条边放入邻接表EdgeNode*minEdge中。输出这个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。