医院选址问题.docx
- 文档编号:3766524
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:14
- 大小:201.89KB
医院选址问题.docx
《医院选址问题.docx》由会员分享,可在线阅读,更多相关《医院选址问题.docx(14页珍藏版)》请在冰豆网上搜索。
医院选址问题
课程设计任务书
2011—2012学年第1学期
电子与信息工程系计算机科学与技术专业班级
课程设计名称:
数据结构课程设计
设计题目:
医院选址问题
完成期限:
自2012年1月2日至2012年1月6日共1周
一、设计目的
熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
二、设计要求
1.重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;
2.按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。
凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;
3.学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;
4.认真编写课程设计报告。
三、设计内容
医院选址问题
1.问题描述
n个村庄之间的交通图可以用有向网图来表示,图中边
现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近?
2.基本要求
(1)建立模型,设计存储结构;
(2)设计算法完成问题求解;
(3)分析算法的时间复杂度。
3.设计思想
医院选址问题实际是求有向图中心点的问题。
首先定义顶点的偏心度。
设图G=(V,E),对任一顶点k,称E(k)=max{d(i,k)}(i∈V)为顶点k的偏心度。
显然,偏心度最小的顶点即为图G的中心点。
如图7(a)所示是一个带权有向图,其各顶点的偏心度如图(b)所示。
医院选址问题的算法用伪代码描述如下:
1.对加权有向图,调用Floyd算法,求每对顶点间最短路径长度的矩阵;
2.对最短路径长度矩阵的每列求大值,即得到各顶点的偏心度;
3.具有最小偏心度的顶点即为所求。
【思考题】图的存储结构和算法的设计需要一定的灵活性和技巧。
从医院选址问题的求解过程,你有什么感想?
答:
通过将图存储的方法很多,这儿用数组,简单化数据,可以更好的编号和运行程序。
四、参考文献
1.王红梅.数据结构.清华大学出版社
2.王红梅.数据结构学习辅导与实验指导.清华大学出版社
3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社
一、需求分析
1.程序的功能;
从n个村庄中选择一个村庄新建一所医院,使这所医院离所有村庄都比较近。
2.输入输出的要求;
输入:
每个村庄的起点、终点和距离。
输出:
离所有村庄都比较近的医院位置
3.测试数据。
上图为测试数据
二、概要设计
该程序使用数组存储矩阵,即顺序表存储结构。
三、详细设计
//Floyd算法将每一对顶点的路径编程最短路径
voidFloyd(intdist[][M],intm)
{
inti,j;
for(intk=0;k for(i=0;i for(j=0;j if(dist[i][k]+dist[k][j] dist[i][j]=dist[i][k]+dist[k][j]; cout< "< cout<<"====================="< for(i=0;i { for(j=0;j { if(dist[i][j]! =100) cout<<""; cout< } cout< } cout<<"====================="< } //Minp函数求最小偏心度的村庄 voidminp(intc[][M],intm) { intinmax[M]; inti,j; for(i=0;i inmax[i]=0; for(j=0;j { intt=0; for(i=0;i { if(t t=c[i][j]; } inmax[j]=t; } cout< "; for(i=0;i cout< cout< intmax=inmax[0]; intl; for(i=0;i if(inmax[i] { max=inmax[i]; l=i; } cout<<"所以医院应该建在村庄"< } voidcreate(intn,intl,intc[][M]) { cout< inti,j,weight; for(i=0;i { for(j=0;j c[i][j]=Maxint; c[i][i]=0; } for(intk=0;k { cout<<"请输入第"< "; C: cin>>i>>j>>weight; if(i>n||i<0||j>n||j<0||weight>Maxint||weight<0) { cout<<"输入非法,请重输该边的所有值"< gotoC; } c[i-1][j-1]=weight; } cout<<"================================================================"< cout<<"整理得到原始邻接矩阵为: "< cout<<"============================="< for(i=0;i { for(j=0;j { if(c[i][j]! =100) cout<<""; cout< } cout< } cout<<"=============================="< } 四、调试分析 通过题目所给例子进行测试和分析,最终得到结构如下截图: 五、核心源程序清单和执行结果 09710207郑朋(数据结构).cpp //09710207郑朋(数据结构).cpp: 定义控制台应用程序的入口点。 // #include"stdafx.h" int_tmain(intargc,_TCHAR*argv[]) { return0; } #include usingnamespacestd; constintMaxint=100; constintM=50;//定义村庄个数的最大值 voidFloyd(intdist[][M],intm)//Floyd算法将每一对顶点的路径编程最短路径 { inti,j; for(intk=0;k for(i=0;i for(j=0;j if(dist[i][k]+dist[k][j] dist[i][j]=dist[i][k]+dist[k][j]; cout< "< cout<<"====================="< for(i=0;i { for(j=0;j { if(dist[i][j]! =100) cout<<""; cout< } cout< } cout<<"====================="< } voidminp(intc[][M],intm)//该函数用于找出最小偏心度的村庄 { intinmax[M]; inti,j; for(i=0;i inmax[i]=0; for(j=0;j { intt=0; for(i=0;i { if(t t=c[i][j]; } inmax[j]=t; } cout< "; for(i=0;i cout< cout< intmax=inmax[0]; intl; for(i=0;i if(inmax[i] { max=inmax[i]; l=i; } cout<<"所以医院应该建在村庄"< } voidcreate(intn,intl,intc[][M]) { cout< inti,j,weight; for(i=0;i { for(j=0;j c[i][j]=Maxint; c[i][i]=0; } for(intk=0;k { cout<<"请输入第"< "; C: cin>>i>>j>>weight; if(i>n||i<0||j>n||j<0||weight>Maxint||weight<0) { cout<<"输入非法,请重输该边的所有值"< gotoC; } c[i-1][j-1]=weight; } cout<<"================================================================"< cout<<"整理得到原始邻接矩阵为: "< cout<<"============================="< for(i=0;i { for(j=0;j { if(c[i][j]! =100) cout<<""; cout< } cout< } cout<<"=============================="< } voidmain() { cout< cout<<"☆医院选址问题,请按以下步骤操作☆"< cout<<"================================"< cout<<"将所有村庄和道路分别从编号(即、、.···)"< intarc[M][M];//用于存储图的邻接矩阵 intm; A: cout<<"1.请输入村庄个数: "; cin>>m; if(m>M||m<0) { cout<<"对不起,输入的数值不合法,请重新输入! "< gotoA; } inte; B: cout<<"2.请输入图中有几条道路: "; cin>>e; if(e>(m*(m-1))||e<0) { cout<<"对不起,输入的数值不合法! "< gotoB; } create(m,e,arc); Floyd(arc,m); minp(arc,m); cout<<"============================运行结束========================"< cout<<""< cout<<" /' \\ //\\"< cout<<" \\ // `\"< cout<<" \\//祝老师同学们: "< cout<<" .-'^'-."< cout<<" .'a___a`.春节愉快合家欢乐! "< cout<<" == (___) =="< cout<<" '.._I_..'心想事成红包拿来! "< cout<<" ____/.`-----'.\____"< cout<<" [###(__)####"< } 六、感想与体会 编程是一件很枯燥的事情,但也是一件很有意义的事情,经过一个星期的设计学习,使我对C++语言和数据结构有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C++语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C++语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 医院 选址 问题