目录
一.问题描述
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
二.基本要求
- 设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介 等信息;以边表示路径,存放路径长度等相关信息。
- 为来访客人提供图中任意景点相关信息的查询。
- 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
三.问题分析
1.数据结构的选取
使用无向图作为该项目的数据结构,并采用邻接矩阵作为无向图的存储结构。其中,图的顶点按照1-n编号分别用于存放校园中的n个景点的详细信息(包括景点名称,代号,简介等);以无向图的边表示两个景点之间连通,并以边的权重表示两个景点之间的路径长度。
2.结构体的定义
1)定义一个无向图结点node结构体,图中的每个结点代表校园内的一个景点,该结构体中包含该景点的详细信息——String类型的景点名称,int类型的景点代号,String类型的景点简介等。
2)定义一个无向图Graph结构体,私有成员包括存放结点的数组vertex[ ],存放邻接矩阵的数组adj[ ],以及结点个数和边的条数。
3)上述两个结构体中均需要编写构造方法和getter方法,以便在主方法中创建对象和读取私有成员。
3.功能分析
1)为来访客人提供图中任意景点相关信息的查询。用户可以通过输入景点代号或者景点名称来查询对应景点的详细信息。
2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径,用户通过输入两个景点的代号并调用相应函数来输出两个景点之间的最短路径以及最短路径长度。
四.逻辑设计
1.模块划分
1)主函数模块
2)景点信息查询模块
3)两景点间最短路径查询模块
2. 抽象数据结构ADT
ADT 校园导游咨询
Data
校园中的各个景点及其详细信息
校园中景点两两之间的路径长度
Operation
创建无向图
初始数据:景点和邻接矩阵
功能:由给定的初始数据确定一个带权值的无向网络图
景点信息查询
输入:景点代号或景点名称
功能:查询该景点的详细信息
输出:景点详细信息
问路查询
输入:两个景点代号
功能:求出两个景点之间的最短路径
输出:两个景点之间的最短简单路径
查看景点列表
输入:无
功能:列出所有景点
输出:输出所有景点的代号即名称
查看菜单
输入:无
功能:输出菜单界面
输出:输出用户选择菜单
退出系统
输入:无
功能:退出该系统
输出:退出系统,欢迎下次使用!
endADT
3. 模块调用关系图
五.物理设计
1.存储结构
1)定义一个结构体作为无向图的结点类型,用于存储单个景点的相关信息。
2)定义一个上述结构体类型的数组,将所有结点存放在该数组中。
2)用一个整型的二维数组(矩阵)存储每两个结点之间的权值大小,用于表示两两景点之间的路径长度。
2.主函数设计
伪代码:
1.创建无向网络图,定义景点个数n
2.初始化n个景点的详细信息并存储在一个数组中和一个n*n的邻接矩阵
3.再提供用户界面供用户选择功能,用switch语句供用户选择
4.调用执行相应的用户选择模块
3.景点信息查询设计
伪代码:
1.从键盘读取需要查询的景点的代号或景点名称
2.遍历存放所有结点的结点数组,寻找符合要求的结点
3.按照格式要求输出该景点的相关信息
4.两景点间最短路径查询设计
伪代码:
1.从键盘读取两个景点的代号
2.编写迪杰斯特拉算法,求图G中从i顶点到其他所有顶点的最短路径
or编写弗洛伊德算法,求图G中每一对顶点之间的最短路径
3.输出步骤2中算法返回的最短路径
4.计算并输出最短路径的长度
5.函数算法框架
6.测试数据
1)在江苏科技大学地图上随机选取11个景点并进行编号如下图:
2)景点标号对应景点名称如下表:
标号 | 景点名称 |
---|---|
1 | 江苏科技大学北门 |
2 | 海韵湖 |
3 | 文理大楼 |
4 | 经世楼 |
5 | 图书馆 |
6 | 三号组团 |
7 | 西食堂 |
8 | 西操场 |
9 | 文体中心 |
10 | 东操场 |
11 | 东食堂 |
3)各个景点之间是否联通以及联通景点之间的路径长度可以自行决定,下面给出本人随意作出的带权无向图。