医院选址
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程设计报告
设计题目: 医院选址
姓名:**
学号: **********
专业:物联网工程
院系:计算机科学与技术学院
班级: 1506
指导教师:***
2017年 1月 6日
摘要
医院是一个为人民服务的服务机构,对于医院选址的问题则关乎其利民程度,一个好的医院选址则可以更好的服务的百姓。本系统的功能就是医院选址。通过Floyd算法,实现该功能。
在课程设计中,系统开发平台为Windows 7,程序设计设计语言采用Visual Studio 2010,设计简单目的明确,简易操作。
关键词程序设计;数据结构;Floyd算法;医院选址
英文摘要
The hospital is a service for people service for hospital location problem is related to the benefit degree, can better service the location of a good hospital of the people. The function of this system is hospital location. Through the Floyd algorithm, the realization of the function.
In the curriculum design, the system development platform for Windows 7, programming design language using Visual Studio 2010, the design of simple and clear, simple operation.
Key words :programming; data structure; Floyd algorithm; hospital location
目录
摘要 (1)
英文摘要 (2)
问题描述 (4)
需求分析 (4)
概要设计 (4)
数据结构设计 (4)
算法设计 (5)
程序设计与实现 (8)
调试分析 (10)
遇到的问题及解决方法 (11)
心得体会 (11)
源代码 (11)
一、问题描述
1.题目内容:问题描述:有n个村庄,现要从这n个村庄中选
择一个村庄新建一所医院,使其余的村庄到这所医院的距离总和来说较短。(n>6)
2.基本要求:输入各个村庄的距离(即图各结点直接弧长)
3.使用Floyd算法求最短路径
4.求到所有结点路径最短的结点及其到其余结点的路径长度
二、需求分析
1.本程序的功能主要实现图的最短路径,
2.输出最短路径的的起点,
3.Floyd算法的实现。
三、概要设计
由于设计功能简单所有并未采用多文件结构处理;
1.#define HUGE 1000000;//设最大弧长,用于最后的选择比较算法
2.int n;//村庄数目在函数外声明n 定义村庄数目的声明。
3.void Shortest(int arcs[10][10]) //用Floyd算法求出最短距离的矩阵
4.int select(int arcs[10][10]){ // 选出使距离最长的那个村庄
四、数据结构设计
1.元素类型
#define HUGE 1000000;//设最大弧长,用于最后的选择比较
算法
int n;//村庄数目在函数外声明n 定义村庄数目的声明。
void Shortest(int arcs[10][10]) //用Floyd算法求出最短距离的矩阵
int select(int arcs[10][10]){ // 选出使距离最长的那个村庄
int v,w,u; v,w用于村庄标号同样用于计数 u用于计数
int arcs[10][10];数组用于存储村庄之间的距离(即结点直接的弧长)
五、算法设计
1、算法分析
1).Floyd算法是一个经典的动态规划算法。用通俗的语言来
描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i 到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。
2).算法描述:
a.从任意一条单边路径开始。所有两点之间的距离是边的权,
如果两点之间没有边相连,则权为无穷大。
b.对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从
u 到 w 再到 v 比己知的路径更短。如果是更新它。
2、算法实现
void Shortest(int arcs[10][10]){ //用Floyd算法求出最短距离的矩阵
int u,v,w;
cout<<"=====请输入相应初始指标====="< cout<<" 村庄总数目为:"; cin>>n; cout<<"\n"; if(n<6){ system("cls"); cout<<"Please input the number more than 6!"< Shortest(arcs); } for(v=1;v<=n;v++) for(w=v;w<=n;w++){ if(v!=w){ cout<<"村庄"< cin>>arcs[v][w]; cout<<"\n"; } else arcs[v][w]=0; } for(v=1;v<=n;v++) for(w=1;w<=v;w++){ arcs[v][w]=arcs[w][v]; } for(u=1;u<=n;u++) for(v=1;v<=n;v++) for(w=0;w if(arcs[v][u]+arcs[u][w] arcs[v][w]=arcs[v][u]+arcs[u][w]; } 3、算法流程图