管道铺设施工的最佳方案问题.doc
- 文档编号:86337
- 上传时间:2022-10-02
- 格式:DOC
- 页数:23
- 大小:450.50KB
管道铺设施工的最佳方案问题.doc
《管道铺设施工的最佳方案问题.doc》由会员分享,可在线阅读,更多相关《管道铺设施工的最佳方案问题.doc(23页珍藏版)》请在冰豆网上搜索。
管道铺设施工的最佳方案问题
一.问题描绘:
1.实验题目:
需要在某个城市n个居民小区之间铺设煤气管道,则在这n个居民小区之间只需要铺设n-1条管道即可。
假定随意两个小区之间都能够铺设管道,但因为地理环境不一样,所需要的花费也不尽同样。
选择最优的方案能使总投资尽可能小,这个问题即为求无向网的最小生成树。
2.基本要求:
在可能假定的m条管道中,选用n-1条管道,使得既能连通n个小区,又能使总投资最小。
每条管道的花费以网中该边的权值形式给出,网的储存采纳毗邻表的结构。
3.测试数据:
使用下列图给出的无线网数据作为程序的输入,求出最正确铺设方案。
右边是给出的参照解。
4.简述每一部分的对象、目的和要求:
I.主函数部分:
对象:
图G;
目的:
为图G分派空间,以作为后续调用函数的参数;
23/23
要求:
无。
II.Create_ALGraph()函数部分:
对象:
极点,边及其权值;
目的:
将极点,边寄存在一同,组成图;
要求:
结构极点表,各极点的毗邻表以结构图。
III.Create_WLGraph()函数部分:
对象:
图G;
目的:
将图中的权值只寄存一次,寄存到w指向的结构体中;要求:
权值只寄存一次,再分别寄存该边的左右极点。
IV. select_info() 函数部分:
对象:
w指向的结构体;
目的:
将该结构体中的各权值以升序摆列;
要求:
采纳简单项选择择法进行排序。
V.Create_TLGraph()函数部分:
对象:
排序后的 w指向的结构体;
目的:
找到组成最小生成树的边;
要求:
依权值升序摆列,判断各边能否组成回路来弃取各边。
二.需求剖析
1.程序所能达到的基本可能:
在n个小区m条管道中,选用n-1条管道,实现连通这n个小区,同时权值
之和为最小。
2.输入输出形式及输入值范围:
程序运转后,用户可依据提示信息:
"Pleaseinputtheverticesandtheedges
"输入顶点数和边数,再根据提示信息:
"Pleaseinputtheinformationofthevertices
"输入极点信息,而后进入循环,创立各个顶
点的毗邻表,即依据提示信息
"Pleaseinput
theinformation
ofedges
:
"
和"Pleaseinputtheinformationofweight:
"
挨次输入各极点与其余极点本
身以及二者之间的权值,创立图完成。
用户输入完成后,程序自动输出运转结果。
输入值一定为字母和浮点数,能够不用划分大小写。
3.测试数据要求:
用户输入字母时,输入大写或小写,都能够被该程序辨别,正常运转。
但必
须依据提示信息后边给出的参照形式,有针对性地输入逗号。
三.纲要设计
为了实现上述功能,该程序以毗邻表来储存图,所以需要图这个抽象数据类
型。
1.图抽象数据种类定义:
ADTALGraph{
数据 对象 :
D={
ai
bi
ci
|ai
AdjList,bi
int,ci
int
,
i=1,2,3....,n,n
0}
数据关系:
R=;
基本操作:
Create_ALGraph(G);程序保护模块:
主函数模块
图模块
调用关系:
主函数模块 图模块
3.主要算法流程图:
Create_ALGraph()算法流程图:
Create_WLGraph() 算法流程图:
开始
开始
读入极点
数和边数 i=0
i=0
i i T F F T 读入顶 点信息 i=i+1 K=0 s! =NULL F T 该权值还未 存入W中 F T 读入该权值 及左右极点 编号 K<2e T s=s->next 读入边 的对应极点及 权值 F i=i+1 将新边表结点 插入到极点Vi 的边表头部 结束 k=k+1 结束 Create_TLGraph()算法流程图: 开始 初始化储存各顶 点被接见状况及 地点信息的结构 体指针vp i=1 i 调用 judge_vertex( )函数 若两极点都已 被接见过 若两极点地点 不一样 将该权值加入 T 中,并把地点 改同样 若左极点未被 接见,右极点 已被接见 若左极点已被 接见,右极点 未被接见 若两极点都未 被接见 将该权值加入T 将该权值加入T 将该权值加入T 中,并把左极点 中,并把右极点 中,并把两极点 的地点改为和右 的地点改为和左 的地点改为同样 极点同样 极点同样 i=i+1 输出最小生 成树的各边 结束 四.详尽设计 1.有关头文件的调用说明: #include<> #include<> #defineMaxVerNum100 2.元素种类、结点种类和结点指针种类: staticvoidforcefloat(float*p) { floatf=*p; forcefloat(&f); } typedefstructnode {intadjvex;floatinfo; structnode*next; }EdgeNode; typedefstructvnode {charvertex;EdgeNode*firstedge; }VertexNode; typedefVertexNodeAdjList[MaxVerNum]; structbian {intz,y; floatinfo; }; typedefstruct {charv[MaxVerNum]; structbiane[MaxVerNum]; }WGraph; structvisit {visited[MaxVerNum]; position[MaxVerNum]; vvpp[MaxVerNum][MaxVerNum]; } 3.毗邻表种类: typedefstruct {AdjListadjlist; intn,e; }ALGraph; ertex)); G->adjlist[i].firstedge=NULL; /*if(G->adjlist[i].vertex! =' '&&G->adjlist[i].vertex! ='\n'&&G->adjlist[i].vertex! =' ') x++;*/ } for(k=0;k<2*(G->e);k++) {printf("Pleaseinputtheinformationofedges : \n"); getchar(); scanf("%c,%c",&p,&q); s=(EdgeNode*)malloc(sizeof(EdgeNode)); s->adjvex=q-64; i=p-64; getchar(); printf("Pleaseinputtheinformationofweight: \n"); scanf("%f",&(s->info)); s->next=G->adjlist[i-1].firstedge; G->adjlist[i-1].firstedge=s; }/* printf("Pleaseoutputtheinformation: \n"); printf("%d,%d\n",G->n,G->e); printf("x=%d\n",x); for(i=0;i {printf("%c\n",G->adjlist[i].vertex); s=G->adjlist[i].firstedge; while(s! =NULL) {printf("thelinbianis%d,theinfois%.1f\n",s->adjvex,s->info); s=s->next; } }*/ } intPanduan_Vertex(intk,inti,WGraph*w,EdgeNode*s) {intt; for(t=0;t if((w->e[t]).y==i+1&&(w->e[t]).z==s->adjvex) return1; return0; } voidselect_info(WGraph*W,ALGraph*G) {inti,j,p,k; floatt; for(i=0;i<(G->e);i++) {p=i; for(j=i+1;j<(G->e);j++) if(W->e[j].info if(p! =i) {t=W->e[p].info; W->e[p].info=W->e[i].info; W->e[i].info=t; k=W->e[p].z; W->e[p].z=W->e[i].z; W->e[i].z=k; k=W
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 管道 铺设 施工 最佳 方案 问题