医院选址问题文档格式.docx

上传人:b****6 文档编号:16672831 上传时间:2022-11-25 格式:DOCX 页数:14 大小:201.89KB
下载 相关 举报
医院选址问题文档格式.docx_第1页
第1页 / 共14页
医院选址问题文档格式.docx_第2页
第2页 / 共14页
医院选址问题文档格式.docx_第3页
第3页 / 共14页
医院选址问题文档格式.docx_第4页
第4页 / 共14页
医院选址问题文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

医院选址问题文档格式.docx

《医院选址问题文档格式.docx》由会员分享,可在线阅读,更多相关《医院选址问题文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

医院选址问题文档格式.docx

vi,vj>

上的权值表示从村庄i到村庄j的道路长度。

现在要从这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<

m;

k++)

for(i=0;

i<

i++)

for(j=0;

j<

j++)

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

dist[i][j])

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

cout<

<

endl<

"

每对顶点路径最短的邻接矩阵为:

endl;

====================="

for(i=0;

{

for(j=0;

{

if(dist[i][j]!

=100)

cout<

"

;

cout<

dist[i][j]<

}

cout<

}

}

//Minp函数求最小偏心度的村庄

voidminp(intc[][M],intm)

intinmax[M];

inmax[i]=0;

for(j=0;

j++)

{

intt=0;

if(t<

c[i][j])

t=c[i][j];

inmax[j]=t;

村庄的偏心度依次为:

i++)

inmax[i]<

intmax=inmax[0];

intl;

i++)//比较inmax数组中元素的大小,并输出最小元素下标+1,即为建医院的地点

if(inmax[i]<

max)

max=inmax[i];

l=i;

所以医院应该建在村庄"

l+1<

中"

voidcreate(intn,intl,intc[][M])

{

============================================================"

inti,j,weight;

n;

c[i][j]=Maxint;

c[i][i]=0;

l;

k++)

请输入第"

k+1<

条道路的起点、终点和它的长度(中间用空格隔开):

C:

cin>

>

i>

j>

weight;

if(i>

n||i<

0||j>

n||j<

0||weight>

Maxint||weight<

0)

输入非法,请重输该边的所有值"

gotoC;

c[i-1][j-1]=weight;

================================================================"

整理得到原始邻接矩阵为:

============================="

if(c[i][j]!

c[i][j]<

=============================="

四、调试分析

通过题目所给例子进行测试和分析,最终得到结构如下截图:

五、核心源程序清单和执行结果

09710207郑朋(数据结构).cpp

//09710207郑朋(数据结构).cpp:

定义控制台应用程序的入口点。

//

#include"

stdafx.h"

int_tmain(intargc,_TCHAR*argv[])

return0;

#include<

iostream>

usingnamespacestd;

constintMaxint=100;

constintM=50;

//定义村庄个数的最大值

voidFloyd(intdist[][M],intm)//Floyd算法将每一对顶点的路径编程最短路径

voidminp(intc[][M],intm)//该函数用于找出最小偏心度的村庄

j++)//inmax数组用来保存最短路径,即邻接矩阵每一列的最大值,也就是每个村庄的偏心度

voidmain()

☆医院选址问题,请按以下步骤操作☆"

================================"

将所有村庄和道路分别从编号(即、、.·

·

)"

intarc[M][M];

//用于存储图的邻接矩阵

intm;

A:

1.请输入村庄个数:

cin>

if(m>

M||m<

对不起,输入的数值不合法,请重新输入!

gotoA;

inte;

B:

2.请输入图中有几条道路:

e;

if(e>

(m*(m-1))||e<

对不起,输入的数值不合法!

gotoB;

create(m,e,arc);

Floyd(arc,m);

minp(arc,m);

============================运行结束========================"

 /'

 \\  //\\"

     \\ // `\"

     \\//祝老师同学们:

     .-'

^'

-."

    .'

a___a`.春节愉快合家欢乐!

   == (___) =="

    '

.._I_..'

心想事成红包拿来!

  ____/.`-----'

.\____"

 [###(__)####"

六、感想与体会

编程是一件很枯燥的事情,但也是一件很有意义的事情,经过一个星期的设计学习,使我对C++语言和数据结构有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;

再有对C++语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C++语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

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

当前位置:首页 > 人文社科 > 军事政治

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

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