ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:42.39KB ,
资源ID:6752466      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6752466.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++医院选址问题课程设计报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++医院选址问题课程设计报告.docx

1、C+医院选址问题课程设计报告C+医院选址问题-课程设计报告学 号 11710115 数据结构课程设计 设计说明书 医院选址问题 起止日期: 2013年 12月 23 日 至 2013 年 12月27日 学生姓名 路江飞 班级 11卓越七班 成绩 指导教师(签字) 计算机与信息工程学院 2013年12 月 27 日 天津城建大学 课程设计任务书 20132014学年第1学期 计算机与信息工程 学院 11卓越 专业 11卓越 7 班级 课程设计名称: 数据结构课程设计 设计题目: 医院选址问题 完成期限:自 2013 年 12 月 23日至 2013年 12 月 27 日共 1 周 设计依据、要求

2、及主要内容(可另加附页): 一、设计目的 熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。 二、设计要求 在本课程设计过程中要求学生: (1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务; (2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩。 (3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表。 (4)认真编写课程设计报告。 三、设计内容 1)问题描述 n个村庄之间的交通图可以用有向网图来表示,图中边上

3、的权值表示从村庄i到村庄j的道路长ij度。现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近, 2) 基本要求 (1) 建立模型,设计存储结构; (2) 设计算法完成问题求解; (3) 分析算法的时间复杂度。 3) 设计思想 医院选址问题实际是求有向图中心点的问题。首先定义顶点的偏心度。 设图G=(V,E),对任一顶点k,称E(k)=maxd(i, k)(i?V)为顶点k的偏心度。显然,偏心度最小的顶点即为图G的中心点。 如图7(a)所示是一个带权有向图,其各顶点的偏心度如图(b)所示。 顶点 偏心度 c 2 4 a , 1 2 3 e a

4、b b 6 c 8 5 1 d d 5 e 7 (a) (b) 图7 带权有向图及各顶点的偏心度 医院选址问题的算法用伪代码描述如下: 1(对加权有向图,调用Floyd算法,求每对顶点间最短路径长度的矩阵; 2(对最短路径长度矩阵的每列求大值,即得到各顶点的偏心度; 3(具有最小偏心度的顶点即为所求。 四、参考文献 1、王红梅,数据结构,清华大学出版社 2、王红梅,数据结构学习辅导与实验指导,清华大学出版社 3、严蔚敏、吴伟民,数据结构C语言版,清华大学出版社(配题集) 1、设计目的 . 1 2、总体设计 . 1 3、详细设计 . 1 3.1、程序具体功能: . 1 3.2、调试分析: . 4

5、 4、源程序和运行结果 . 4 4.1、源程序 . 4 4.2、运行结果 . 9 5、心得体会 . 9 6、参考文献 . 10 医院选址问题 1、设计目的 熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。 2、总体设计 医院选址问题 输入 求最短路径 求最小偏心度 输出 3、详细设计 3.1、程序具体功能: 1(输入函数 从键盘输入村庄的个数、道路的个数、以及各个村庄之间的距离,采用邻接矩阵存储,带有相应的异常处理。 核心代码: void input() bool flag=true; while(flag) 1 coutcountry_number)/异常检测 break;

6、 else cout输入有误endl; cin.sync(); /清空流 cin.clear(); /清除流错误标记 continue; while(flag) coutroad_number&road_number0&road_number= country_number*(coun try_number-1) break; else cout输入有误endl; cin.sync(); /清空流 cin.clear(); /清除流错误标记 continue; for(int i=1;i=country_number;i+) cout请输入第icountry_namei; 2.求最短路径 对加

7、权有向图,调用Floyd算法,求每对顶点间最短路径长度的矩阵。 核心代码: void MGraph:Floyd()/Floyd算法 int i,j,k; for (i=1; i=vertexNum; i+) for (j=1; j=vertexNum; j+) 2 distij=arcij; for (k=1; k=vertexNum; k+) for (i=1; i=vertexNum; i+) for (j=1; j=vertexNum; j+) if (distik+distkjdistij) distij=distik+distkj; 3.求最小偏心度 对最短路径长度矩阵的每列求大值,

8、即得到各顶点的偏心度。 核心代码: int MGraph:min()/求最小偏心度 int resultMaxSize; for(int k=1;k=vertexNum;k+)/初始化求每列的最大值的矩阵 resultk=0; int min_result=9999;/最小偏心度 int temp;/记录医院在几号村庄 for(int i=1;i=vertexNum;i+)/最短路径长度矩阵的每列求大值 int t=0; for(int j=1;jt) t=distji; resulti=t; 4.输出 输出有向图的原始邻接矩阵、最后的邻接矩阵、各个村庄距离医院的距离以及最小偏心度。 核心代码

9、: cout初始的邻接矩阵为:endl; for (i=1; i=vertexNum; i+) for (j=1; j=vertexNum; j+) coutsetiosflags(ios:left); coutsetw(6)arcij; if(j=vertexNum) coutendl; 3 cout最终的邻接矩阵为:endl; for (i=1; i=vertexNum; i+) for (j=1; j=vertexNum; j+) coutsetiosflags(ios:left); coutsetw(6)distij; if(j=vertexNum) coutendl; cout各村庄

10、的偏心度如下所示:endl; for(int b=1;b=vertexNum;b+)/输出各顶点的偏心度 coutresultb ; cout医院应该建在country_nameMG.min()村庄endl; 3.2、调试分析: 1.输入调试 输入相应的数据,查看能不能输出相应的邻接矩阵,从键盘输入任意的数据,查询程序能否正常运行。 2.最小路径调试 运行程序,查看能否将正确结果输出,测试三次以上。 3.最小偏心度调试 运行程序,查看能否将正确结果输出,测试三次以上。 4.输出调试 如果以上三步都调试成功,输出则调试成功。 4、源程序和运行结果 4.1、源程序 MGraph.h: const

11、int MaxSize = 10; /图中最多顶点个数 template class MGraph public: MGraph(DataType a , int n, int e); /构造函数建立具有n个顶点e条边的图 MGraph( ) /析构函数为空 void Floyd(); /Floyd算法 4 int min(); /求最小偏心度 private: DataType vertexMaxSize; /放图中顶点的数组 int arcMaxSizeMaxSize; /存放图中边的数组 int distMaxSizeMaxSize; /存放中间结果的数组 int vertexNum;

12、/图的顶点数 int arcNum; /图的边数 ; MGraph.cpp: #include #include #include #include MGraph.h using namespace std; template /图的存储结构:带权的邻接矩阵存储结构 MGraph:MGraph(DataType a , int n, int e)/构造函数 int i,j,w; vertexNum=n; arcNum=e; for (i=1; i=vertexNum; i+)/数组下标均从1开始 vertexi=ai; for (i=1; i=vertexNum; i+) for (j=1;

13、j=vertexNum; j+) if(i=j) arcij=0; else arcij=9999; /9999表示无穷大 for (int k=1; k=arcNum; k+) couti; cinj; cinw; arcij=w; cout初始的邻接矩阵为:endl; for (i=1; i=vertexNum; i+) for (j=1; j=vertexNum; j+) 5 coutsetiosflags(ios:left); coutsetw(6)arcij; if(j=vertexNum) coutendl; template void MGraph:Floyd()/Floyd算法

14、 int i,j,k; for (i=1; i=vertexNum; i+) for (j=1; j=vertexNum; j+) distij=arcij; for (k=1; k=vertexNum; k+) for (i=1; i=vertexNum; i+) for (j=1; j=vertexNum; j+) if (distik+distkjdistij) distij=distik+distkj; cout最终的邻接矩阵为:endl; for (i=1; i=vertexNum; i+) for (j=1; j=vertexNum; j+) coutsetiosflags(ios

15、:left); coutsetw(6)distij; if(j=vertexNum) coutendl; template int MGraph:min()/求最小偏心度 int resultMaxSize; for(int k=1;k=vertexNum;k+)/初始化求每列的最大值的矩阵 resultk=0; 6 int min_result=9999;/最小偏心度 int temp;/记录医院在几号村庄 for(int i=1;i=vertexNum;i+)/最短路径长度矩阵的每列求大值 int t=0; for(int j=1;jt) t=distji; resulti=t; cout

16、各村庄的偏心度如下所示:endl; for(int b=1;b=vertexNum;b+)/输出各顶点的偏心度 coutresultb ; coutendl; for(int a=1;a=vertexNum;a+)/最小偏心度 if(resultamin_result) min_result=resulta; temp=a; for(int c=1;c=vertexNum;c+) if(temp=c) continue; else coutc号村庄距离temp号村庄:distctempendl; return temp; Main.cpp: #include #include #include

17、 MGraph.cpp using namespace std; string country_nameMaxSize;/村庄名字数组 int country_number; /村庄个数 int road_number; /道路个数 void input() 7 bool flag=true; while(flag) coutcountry_number)/异常检测 break; else cout输入有误endl; cin.sync(); /清空流 cin.clear(); /清除流错误标记 continue; while(flag) coutroad_number&road_number0

18、&road_number=country_number*(country_number-1) break; else cout输入有误endl; cin.sync(); /清空流 cin.clear(); /清除流错误标记 continue; for(int i=1;i=country_number;i+) cout请输入第icountry_namei; void main( ) input(); MGraph MG(country_name, country_number,road_number); MG.Floyd(); cout医院应该建在country_nameMG.min()村庄en

19、dl; 8 4.2、运行结果 5、心得体会 编程是一件很枯燥的事情,但也是一件很有意义的事情,经过一个星期的设计学习,使我对C+语言和数据结构有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C+语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C+语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。 通过这次的课程设计,我感觉自己写代码的水平还有待提高,要想精通一门编程语言,写大量的代码9 是必不可少的。以后我将更加努力学习专业知识,努力提高写代码的能力。 6、参考文献 1、王红梅,数据结构,清华大学出版社 2、王红梅,数据结构学习辅导与实验指导,清华大学出版社 3、严蔚敏、吴伟民,数据结构C语言版,清华大学出版社(配题集) 4、王晓东,计算机算法分析与设计(第三版) 10

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1