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

上传人:b****5 文档编号:6752466 上传时间:2023-01-10 格式:DOCX 页数:14 大小:42.39KB
下载 相关 举报
C++医院选址问题课程设计报告.docx_第1页
第1页 / 共14页
C++医院选址问题课程设计报告.docx_第2页
第2页 / 共14页
C++医院选址问题课程设计报告.docx_第3页
第3页 / 共14页
C++医院选址问题课程设计报告.docx_第4页
第4页 / 共14页
C++医院选址问题课程设计报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

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

《C++医院选址问题课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++医院选址问题课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。

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

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

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

学号11710115

数据结构课程设计

设计说明书

医院选址问题

起止日期:

2013年12月23日至2013年12月27日

学生姓名路江飞班级11卓越七班成绩指导教师(签字)

计算机与信息工程学院

2013年12月27日

天津城建大学

课程设计任务书

2013—2014学年第1学期

计算机与信息工程学院11卓越专业11卓越7班级课程设计名称:

数据结构课程设计设计题目:

医院选址问题完成期限:

自2013年12月23日至2013年12月27日共1周设计依据、要求及主要内容(可另加附页):

一、设计目的

熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。

二、设计要求

在本课程设计过程中要求学生:

(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;

(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者

皆以零分计入本课程设计成绩。

凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程

设计成绩。

(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表。

(4)认真编写课程设计报告。

三、设计内容

1)问题描述

n个村庄之间的交通图可以用有向网图来表示,图中边上的权值表示从村庄i到村庄j的道路长ij

度。

现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近,

2)基本要求

(1)建立模型,设计存储结构;

(2)设计算法完成问题求解;

(3)分析算法的时间复杂度。

3)设计思想

医院选址问题实际是求有向图中心点的问题。

首先定义顶点的偏心度。

设图G=(V,E),对任一顶点k,称E(k)=max{d(i,k)}(i?

V)为顶点k的偏心度。

显然,偏心度最

小的顶点即为图G的中心点。

如图7(a)所示是一个带权有向图,其各顶点的偏心度如图(b)所示。

顶点偏心度c24a,123eabb6

c851dd5e7

(a)(b)

图7带权有向图及各顶点的偏心度

医院选址问题的算法用伪代码描述如下:

1(对加权有向图,调用Floyd算法,求每对顶点间最短路径长度的矩阵;

2(对最短路径长度矩阵的每列求大值,即得到各顶点的偏心度;

3(具有最小偏心度的顶点即为所求。

四、参考文献

1、王红梅,数据结构,清华大学出版社

2、王红梅,数据结构学习辅导与实验指导,清华大学出版社

3、严蔚敏、吴伟民,《数据结构C语言版》,清华大学出版社(配题集)

1、设计目的...................................................................12、总体设计...................................................................13、详细设计...................................................................1

3.1、程序具体功能:

........................................................1

3.2、调试分析:

............................................................44、源程序和运行结果...........................................................4

4.1、源程序................................................................4

4.2、运行结果..............................................................95、心得体会...................................................................96、参考文献..................................................................10

医院选址问题1、设计目的

熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。

2、总体设计

医院选址问题

输入求最短路径求最小偏心度输出

3、详细设计

3.1、程序具体功能:

1(输入函数

从键盘输入村庄的个数、道路的个数、以及各个村庄之间的距离,采用邻接矩阵存储,带有

相应的异常处理。

核心代码:

voidinput()

{

boolflag=true;

while(flag)

{

1

cout<<"请输入村庄的个数:

";

if(cin>>country_number)//异常检测

break;

else

{

cout<<"输入有误~"<

cin.sync();//清空流

cin.clear();//清除流错误标记

continue;

}

}

while(flag)

{

cout<<"请输入道路的条数:

";

if(cin>>road_number&&road_number>0&&road_number<=

country_number*(country_number-1))

break;

else

{

cout<<"输入有误~"<

cin.sync();//清空流

cin.clear();//清除流错误标记

continue;

}

}

for(inti=1;i<=country_number;i++)

{

cout<<"请输入第"<

";

cin>>country_name[i];

}

}

2.求最短路径

对加权有向图,调用Floyd算法,求每对顶点间最短路径长度的矩阵。

核心代码:

voidMGraph:

:

Floyd()//Floyd算法

{

inti,j,k;

for(i=1;i<=vertexNum;i++)

for(j=1;j<=vertexNum;j++)

2

{

dist[i][j]=arc[i][j];

}

for(k=1;k<=vertexNum;k++)

for(i=1;i<=vertexNum;i++)

for(j=1;j<=vertexNum;j++)

if(dist[i][k]+dist[k][j]

{

dist[i][j]=dist[i][k]+dist[k][j];

}

3.求最小偏心度

对最短路径长度矩阵的每列求大值,即得到各顶点的偏心度。

核心代码:

intMGraph:

:

min()//求最小偏心度

{

intresult[MaxSize];

for(intk=1;k<=vertexNum;k++)//初始化求每列的最大值的矩阵

result[k]=0;

intmin_result=9999;//最小偏心度

inttemp;//记录医院在几号村庄

for(inti=1;i<=vertexNum;i++)//最短路径长度矩阵的每列求大值

{

intt=0;

for(intj=1;j<=vertexNum;j++)

if(dist[j][i]>t)

t=dist[j][i];

result[i]=t;

}

4.输出

输出有向图的原始邻接矩阵、最后的邻接矩阵、各个村庄距离医院的距离以及最小偏心度。

核心代码:

cout<<"初始的邻接矩阵为:

"<

for(i=1;i<=vertexNum;i++)

for(j=1;j<=vertexNum;j++)

{

cout<

:

left);

cout<

if(j==vertexNum)

cout<

}

3

cout<<"最终的邻接矩阵为:

"<

for(i=1;i<=vertexNum;i++)

for(j=1;j<=vertexNum;j++)

{

cout<

:

left);

cout<

if(j==vertexNum)

cout<

}

cout<<"各村庄的偏心度如下所示:

"<

for(intb=1;b<=vertexNum;b++)//输出各顶点的偏心度

cout<

cout<<"医院应该建在"<

3.2、调试分析:

1.输入调试

输入相应的数据,查看能不能输出相应的邻接矩阵,从键盘输入任意的数据,查询程序能否

正常运行。

2.最小路径调试

运行程序,查看能否将正确结果输出,测试三次以上。

3.最小偏心度调试

运行程序,查看能否将正确结果输出,测试三次以上。

4.输出调试

如果以上三步都调试成功,输出则调试成功。

4、源程序和运行结果

4.1、源程序

MGraph.h:

constintMaxSize=10;//图中最多顶点个数

template

classMGraph

{

public:

MGraph(DataTypea[],intn,inte);//构造函数建立具有n个顶点e条边的图

~MGraph(){}//析构函数为空

voidFloyd();//Floyd算法

4

intmin();//求最小偏心度

private:

DataTypevertex[MaxSize];//放图中顶点的数组

intarc[MaxSize][MaxSize];//存放图中边的数组

intdist[MaxSize][MaxSize];//存放中间结果的数组

intvertexNum;//图的顶点数

intarcNum;//图的边数

};

MGraph.cpp:

#include

#include

#include

#include"MGraph.h"

usingnamespacestd;

template//图的存储结构:

带权的邻接矩阵存储结构

MGraph:

:

MGraph(DataTypea[],intn,inte)//构造函数{

inti,j,w;

vertexNum=n;

arcNum=e;

for(i=1;i<=vertexNum;i++)//数组下标均从1开始

vertex[i]=a[i];

for(i=1;i<=vertexNum;i++)

for(j=1;j<=vertexNum;j++)

if(i==j)

arc[i][j]=0;

else

arc[i][j]=9999;//9999表示无穷大

for(intk=1;k<=arcNum;k++)

{

cout<<"请输入两个村庄的序号和它们之间的距离:

";

cin>>i;

cin>>j;

cin>>w;

arc[i][j]=w;

}

cout<<"初始的邻接矩阵为:

"<

for(i=1;i<=vertexNum;i++)

for(j=1;j<=vertexNum;j++)

5

{

cout<

:

left);

cout<

if(j==vertexNum)

cout<

}

}

template

voidMGraph:

:

Floyd()//Floyd算法

{

inti,j,k;

for(i=1;i<=vertexNum;i++)

for(j=1;j<=vertexNum;j++)

{

dist[i][j]=arc[i][j];

}

for(k=1;k<=vertexNum;k++)

for(i=1;i<=vertexNum;i++)

for(j=1;j<=vertexNum;j++)

if(dist[i][k]+dist[k][j]

{

dist[i][j]=dist[i][k]+dist[k][j];

}

cout<<"最终的邻接矩阵为:

"<

for(i=1;i<=vertexNum;i++)

for(j=1;j<=vertexNum;j++)

{

cout<

:

left);

cout<

if(j==vertexNum)

cout<

}

}

template

intMGraph:

:

min()//求最小偏心度

{

intresult[MaxSize];

for(intk=1;k<=vertexNum;k++)//初始化求每列的最大值的矩阵

result[k]=0;

6

intmin_result=9999;//最小偏心度

inttemp;//记录医院在几号村庄

for(inti=1;i<=vertexNum;i++)//最短路径长度矩阵的每列求大值

{

intt=0;

for(intj=1;j<=vertexNum;j++)

if(dist[j][i]>t)

t=dist[j][i];

result[i]=t;

}

cout<<"各村庄的偏心度如下所示:

"<

for(intb=1;b<=vertexNum;b++)//输出各顶点的偏心度

cout<

cout<

for(inta=1;a<=vertexNum;a++)//最小偏心度

if(result[a]

{

min_result=result[a];

temp=a;

}

for(intc=1;c<=vertexNum;c++)

{

if(temp==c)

continue;

else

cout<

"<

}

returntemp;

}

Main.cpp:

#include

#include

#include"MGraph.cpp"usingnamespacestd;stringcountry_name[MaxSize];//村庄名字数组intcountry_number;//村庄个数

introad_number;//道路个数

voidinput()

7

{

boolflag=true;

while(flag)

{

cout<<"请输入村庄的个数:

";

if(cin>>country_number)//异常检测

break;

else

{

cout<<"输入有误~"<

cin.sync();//清空流

cin.clear();//清除流错误标记

continue;

}

}

while(flag)

{

cout<<"请输入道路的条数:

";

if(cin>>road_number&&road_number>0&&road_number<=country_number*(country_number-1))

break;

else

{

cout<<"输入有误~"<

cin.sync();//清空流

cin.clear();//清除流错误标记

continue;

}

}

for(inti=1;i<=country_number;i++)

{

cout<<"请输入第"<

";

cin>>country_name[i];

}

}

voidmain()

{

input();

MGraphMG(country_name,country_number,road_number);

MG.Floyd();

cout<<"医院应该建在"<

8

}

4.2、运行结果

5、心得体会

编程是一件很枯燥的事情,但也是一件很有意义的事情,经过一个星期的设计学习,使我对C++

语言和数据结构有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更

好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,

通过学习也有所改进;再有对C++语言的一些标准库函数不太了解,还有对函数调用的正确使用不够

熟悉,还有对C++语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

通过这次的课程设计,我感觉自己写代码的水平还有待提高,要想精通一门编程语言,写大量的代码

9

是必不可少的。

以后我将更加努力学习专业知识,努力提高写代码的能力。

6、参考文献

1、王红梅,数据结构,清华大学出版社

2、王红梅,数据结构学习辅导与实验指导,清华大学出版社3、严蔚敏、吴伟民,《数据结构C语言版》,清华大学出版社(配题集)4、王晓东,计算机算法分析与设计(第三版)

10

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

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

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