- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计任务书
20—2012学年第学期
系 专业 班级
课程设计名称:
设计题目:
完成期限:自 年 月 日至 年 月 日共 周
熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
设计要求
重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;
按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;
学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;
认真编写课程设计报告。
设计内容
医院选址问题
问题描述
n个村庄之间的交通图可以用有向网图来表示,图中边vi, vj上的权值表示从村庄i到村庄j的道路长度。现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄,才能使所有的村庄离医院都比较近?
基本要求
(1) 建立模型,设计存储结构;
(2) 设计算法完成问题求解;
(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
二、 概要设计 1
三、 详细设计 2
四、 调试分析 4
五、 核心源程序清单和执行结果 6
六、 感想与体会 10
需求分析
程序的功能;
从n个村庄中选择一个村庄新建一所医院,使这所医院离所有村庄都比较近。
输入输出的要求;
输入:每个村庄的起点、终点和距离。
输出:离所有村庄都比较近的医院位置
测试数据。
上图为测试数据
概要设计
该程序使用数组存储矩阵,即顺序表存储结构。
详细设计
//Floyd算法将每一对顶点的路径编程最短路径
void Floyd(int dist[][M],int m)
{
int i,j;
for(int k=0;km;k++)
for(i=0;im;i++)
for(j=0;jm;j++)
if(dist[i][k]+dist[k][j]dist[i][j])
dist[i][j]=dist[i][k]+dist[k][j];
coutendl每对顶点路径最短的邻接矩阵为:endlendl;
cout=====================endl;
for(i=0;im;i++)
{
for(j=0;jm;j++)
{
if(dist[i][j]!=100)
cout ;
coutdist[i][j] ;
}
coutendl;
}
cout=====================endl;
}
//Minp函数求最小偏心度的村庄
void minp(int c[][M],int m)
{
int inmax[M];
int i,j;
for(i=0;im;i++)
inmax[i]=0;
for(j=0;jm;j++)
{
int t=0;
for(i=0;im;i++)
{
if(tc[i][j])
t=c[i][j];
}
inmax[j]=t;
}
coutendl村庄的偏心度依次为:;
for(i=0;im;i++)
coutinmax[i] ;
coutendl;
int max=inmax[0];
int l;
for(i=0;im;i++) //比较inmax数组中元素的大小,并输出最小元素下标+1,即为建医院的地点
if(inmax[i]max)
文档评论(0)