医院选址问题
更新时间:2023-12-27 04:40:01 阅读量: 教育文库 文档下载
课程设计任务书
2011—2012学年第1学期
电子与信息工程 系 计算机科学与技术 专业 班级 课程设计名称: 数据结构课程设计 设计题目: 医院选址问题
完成期限:自 2012 年 1 月 2 日至 2012 年 1 月 6 日共 1 周
一、 二、
设计目的 设计要求
熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
1. 重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务; 2. 按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者
与被抄袭者皆以零分计入本课程设计成绩。凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;
3. 学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表; 4. 认真编写课程设计报告。 三、
设计内容 医院选址问题 1. 问题描述
n个村庄之间的交通图可以用有向网图来表示,图中边
2. 基本要求
(1) 建立模型,设计存储结构; (2) 设计算法完成问题求解; (3) 分析算法的时间复杂度。 3. 设计思想
医院选址问题实际是求有向图中心点的问题。首先定义顶点的偏心度。
设图G=(V,E),对任一顶点k,称E(k)=max{d(i, k)}(i∈V)为顶点k的偏心度。显然,偏心度最小的顶点即为图G的中心点。
如图7(a)所示是一个带权有向图,其各顶点的偏心度如图(b)所示。
1
2 1 2 1 2 3 3 4 4 5 5 顶点 a b b d e 偏心度 ? 6 8 5 7 1
医院选址问题的算法用伪代码描述如下:
1.对加权有向图,调用Floyd算法,求每对顶点间最短路径长度的矩阵; 2.对最短路径长度矩阵的每列求大值,即得到各顶点的偏心度; 3.具有最小偏心度的顶点即为所求。
【思考题】图的存储结构和算法的设计需要一定的灵活性和技巧。从医院选址问题的求解过程,你有什么感想?
答:通过将图存储的方法很多,这儿用数组,简单化数据,可以更好的编号和运行程序。 四、
参考文献
1.王红梅.数据结构.清华大学出版社
2.王红梅.数据结构学习辅导与实验指导.清华大学出版社 3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社
2
目录
一、 二、 三、 四、 五、 六、
需求分析..................................................... 1 概要设计..................................................... 1 详细设计..................................................... 2 调试分析..................................................... 4 核心源程序清单和执行结果..................................... 6 感想与体会.................................................. 10
一、 需求分析
从n个村庄中选择一个村庄新建一所医院,使这所医院离所有村庄都比较近。
1. 程序的功能; 2. 输入输出的要求;
输入:每个村庄的起点、终点和距离。 输出:离所有村庄都比较近的医院位置 3. 测试数据。 2 3 4 顶点 偏心度 a ? 1 1 2 2 3 5 b 6 1 4 5 b 8 d 5 e 7 (a) (b) 图1 带权有向图及各顶点的偏心度
上图为测试数据 二、
概要设计
该程序使用数组存储矩阵,即顺序表存储结构。
开始
A:输入村庄数
B:输入道路数
C:create函数得到原始邻接矩阵
Floyd算法将每一对顶点的路径编程最
短路径
1
minp函数找出最小偏心度的村庄 程序结束 三、
详细设计
//Floyd算法将每一对顶点的路径编程最短路径 void Floyd(int dist[][M],int m) { int i,j;
for(int k=0;k dist[i][j]=dist[i][k]+dist[k][j]; cout< cout<<\ cout< } cout< } cout<<\ } //Minp函数求最小偏心度的村庄 void minp(int c[][M],int m) { 2 int inmax[M]; int i,j; for(i=0;i for(j=0;j int t=0; for(i=0;i if(t inmax[j]=t; } cout< int max=inmax[0]; int l; for(i=0;i max=inmax[i]; l=i; } cout<<\所以医院应该建在村庄\中\} void create(int n,int l,int c[][M]) { cout< ============================================================\ int i,j,weight; for(i=0;i for(j=0;j for(int k=0;k cout<<\请输入第\条道路的起点、终点和它的长度(中间用空格隔开):\ 3 C: cin>>i>>j>>weight; if(i>n||i<0||j>n||j<0||weight>Maxint||weight<0) { cout<<\输入非法,请重输该边的所有值\ goto C; } 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<<\} 四、 调试分析 通过题目所给例子进行测试和分析,最终得到结构如下截图: 4 5 五、 核心源程序清单和执行结果 09710207郑朋(数据结构).cpp // 09710207郑朋(数据结构).cpp : 定义控制台应用程序的入口点。 // #include \ int _tmain(int argc, _TCHAR* argv[]) { 6 } return 0; #include const int M=50; //定义村庄个数的最大值 void Floyd(int dist[][M],int m)//Floyd算法将每一对顶点的路径编程最短路径 { } void minp(int c[][M],int m) //该函数用于找出最小偏心度的村庄 { int inmax[M]; int i,j; for(i=0;i inmax[i]=0; for(j=0;j 7 int i,j; for(int k=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(j=0;j cout< if(dist[i][j]!=100) cout<<\cout< 的最大值,也就是每个村庄的偏心度 } } int t=0; for(i=0;i inmax[j]=t; if(t cout< cout< for(i=0;i if(inmax[i] cout<<\所以医院应该建在村庄\中\ max=inmax[i]; l=i; 素下标+1,即为建医院的地点 void create(int n,int l,int c[][M]) { cout< for(int k=0;k cout<<\请输入第\条道路的起点、终点和它的长度(中间用空格隔开):\ 8 ============================================================\ for(j=0;j c[i][j]=Maxint; C: } } cin>>i>>j>>weight; { } c[i-1][j-1]=weight; cout<<\输入非法,请重输该边的所有值\goto C; if(i>n||i<0||j>n||j<0||weight>Maxint||weight<0) cout<<\ cout<<\整理得到原始邻接矩阵为:\cout<<\for(i=0;i cout<<\ for(j=0;j cout< if(c[i][j]!=100) cout<<\cout< ================================================================\ void main() { cout< cout<<\☆医院选址问题,请按以下步骤操作☆\cout<<\cout<<\将所有村庄和道路分别从编号(即、、.···)\int arc[M][M]; //用于存储图的邻接矩阵 int m; cin>>m; if(m>M||m<0) { cout<<\对不起,输入的数值不合法,请重新输入!\goto A; 9 A: cout<<\请输入村庄个数:\ } } int e; cin>>e; if(e>(m*(m-1))||e<0) { } create(m,e,arc); Floyd(arc,m); minp(arc,m); cout<<\运行结束========================\cout<<\ cout<<\/' \\\\ //\\\\ \cout<<\ \\\\ // `\\ \ cout<<\ \\\\ // 祝老师同学们:\cout<<\ .-'^'-. \ cout<<\ .' a___a `. 春节愉快合家欢乐!\cout<<\ == (___) == \ cout<<\ '. ._I_. .' 心想事成红包拿来!\cout<<\ ____/.`-----'.\\____ \cout<<\[###(__)#### \ cout<<\对不起,输入的数值不合法!\goto B; B: cout<<\请输入图中有几条道路:\ 六、 感想与体会 编程是一件很枯燥的事情,但也是一件很有意义的事情,经过一个星期的设计学习, 使我对C++语言和数据结构有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C++语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C++语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。 10
正在阅读:
医院选址问题12-27
《谁动了我的奶酪》 - -内容简介12-22
品味暑假生活作文700字06-25
联合培养博士研究生国内导师推荐信08-29
研发成本管理-质量与成本的平衡之道06-10
《大学物理学(第二版)》(李乃伯主编)第一至第五单元课后习题指导01-09
《中药炮制学》第十章 炙法05-04
2017年中国矿业大学录取查询02-15
《离散数学》试题及答案 205-03
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 选址
- 医院
- 问题
- 2018年物业保安个人工作总结与2018年物业公司客服工作总结范文合集
- 北京市2017届高三化学一轮复习 4.4 氮的氧化物和硝酸课时测试(含解析)
- 基于JAVA语言的汽车维修管理系统的实现(论文)
- 2019最新整理-安全师考试《安全生产管理知识》试题精选
- “尖子生”培养实施方案
- 最高人民检察院、公安部关于印发最高人民检察院、公安部关于逮
- 大学生创新创业训练计划项目申报书(包含内容) - 图文
- 大数据时代大学生网络法制教育问题浅析-精选教育文档
- (押题密卷)新八年级英语上册 Unit 8 How do you make a banana milk shake P3学案(无答案)(新版)人教
- 《统计学》练习题(3)
- 2018-2019保安个人年终工作总结格式
- 剑桥雅思4 test1 task 1考官范文翻译
- 车辆损失答辩状汇总-推荐word版(11页)
- 迈克尔逊干涉仪实验报告
- PowerPoint2010选择题
- 2016-2022年中国橡胶家用手套市场需求调研与市场商机分析报告
- 汉字文化在小学识字教学中渗透的策略-教育文档资料
- 2019年中国教育培训市场分析预测及发展趋势研究报告目录
- 江西省南昌市八一中学2012-2013学年高一上学期文理分科考试物理试题
- 黑龙江省哈尔滨三中2017届高三第四次模拟数学(文)试卷及答案