数据结构校园导航程序设计

  • 格式:doc
  • 大小:349.00 KB
  • 文档页数:15

下载文档原格式

  / 35
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、设计题目:

实验题目:

设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

二、需求分析

实验设计的是实现一个简易的校园导航平面图。

本课题实现校园多个场所(至少10个)的最短路径求解。

(1)输入的形式和输入值的范围:本系统主要数据类型为字符型和整形,字符型主要包括地点编号,地点名称,地点简介,功能编号;输入功能编号与单位编号进行

操作。

(2) 输出的形式:输出则通过已有的信息数据,通过相关的操作输出相应信息。

(3) 程序所能达到的功能:可以为学生或旅客了解我校大概地点位置以及路径,

主要功能:1.浏览校园地点及简介;

2.查看所有游览路线;

3.选择出发点和目的地求出最佳路径;

4.查看某一单位信息。

(4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

a.首先看到的是校园导航系统的菜单:

b.查看浏览路线等待输入起始地点:

C.选择出发点与目的地等待输入起始地点与目的地编号(中间用空格隔开):

d.参看地点信息等待输入地点编号:

三、概要设计

本系统包含菜单(menu),显示信息(show),弗洛伊德算法(floyd),迪杰斯特拉算法(shotpath_dj),查找地点信息等程序段(search)。主程序为整系统的入口处,菜单主要实现显示系统功能,显示信息主要实现显示地点信息,弗洛伊德算法主要实现求两地点之间最短路径,迪杰斯特拉算法实现找两地点之间所有路径,查找地点信息主要实现显示某一地点信息。

系统首先通过主程序调用void main( );进入系统主菜单函数,根据用户的选择可分别进入:1.浏览各地点及简介;

2.查看所有游览路径;

3.选择出发点和目的地求出最短路径;

4.查看地点信息;

5.退出系统。

选择“1”项,显示十个地点的有关信息,包括地点编号,地点名称,地点简介。

选择“2”项,会进入输入起始地点编号的界面,输入正确编号后会显示起始地点到其

余九个地点的所有路径。

选择“3”项,会进入输入起始地点与目的地点的界面,输入起始地

点与目的地点,并有空格隔开就得到两地点之间的最短路径。

选择“4”项,会进入输入要查看的地点的界面,输入地点编号后会显示该地点的有关信息。

选择“5”项,就会退出程序。

下图为程序总框架图,表示函数之间的函数关系:

四、系统详细设计

(1)十个校园地点图:

0:正大门 1:南三栋 2:西区篮球场 3:食堂 4:教三栋 5:图书馆 6:北区食

堂 7:医务室 8:软件楼 9:北门

(2)主程序流程图:

(3)迪结斯特拉算法实现的顶点V1到其他顶点的最短路径:

void ShortPath_Dj(MGraph * G)

{

int v,w,i,min,t=0,x,flag=1,v0;

int final[20], D[20], p[20][20];

cout<<"编号地点名称简介 "<

for(v=0;vvexnum;v++)

cout<vexs[v].num<<""<vexs[v].name<<" "<vexs[v].introduction<

{

cout<<"请输入一个起始地点编号:";

cin>>v0;

if(v0<0||v0>G->vexnum)

{

cout<<"地点编号不存在!请重新输入地点编号:";

cin>>v0;

}

if(v0>=0&&v0vexnum)

flag=0;

}

for(v=0;vvexnum;v++)

{

final[v]=0;

D[v]=G->arcs[v0][v].adj;

for(w=0;wvexnum;w++)

p[v][w]=0;

if(D[v]

{

p[v][v0]=1;p[v][v]=1;

}

}

D[v0]=0;final[v0]=1;

for(i=1;ivexnum;i++)

{

min=infinity;

for(w=0;wvexnum;w++)

if(!final[w])

if(D[w]

final[v]=1;

for(w=0;wvexnum;w++)

if(!final[w]&&(min+G->arcs[v][w].adj

D[w]=min+G->arcs[v][w].adj;

for(x=0;xvexnum;x++)

p[w][x]=p[v][x];

p[w][w]=1;

}

}

for(v=0;vvexnum;v++)

{

if(v0!=v) cout<vexs[v0].name;

for(w=0;wvexnum;w++)

{

if(p[v][w]&&w!=v0) cout<<"->"<vexs[w].name; t++;