校园导游咨询程序实验报告 第1篇
Floyd算法可以给出网络中任意两个结点之间的最短路径,因此它是比Dijkstra更一般的算法。Floyd算法的思想是将n个结点的网络表示为n行n列的矩阵,而矩阵中的元素Di,j表示从结点i到结点j的距离,如果两点直接没有边相连,则相应的元素就是无穷∞。 具体过程描述如下:
a.从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。 b.对于每一对结点 i 和 j,看看是否存在一个结点 k 使得从 i 到 k 再到 j 比己知的路径更短。如果是更新它,直到所有的结点都已经尝试过。
伪代码描述如下:
注意Floyd算法为了能回溯得到最短路径的结果,需要声明一个前趋结点数组,用来保存所有点的前一个结点,每次找到更短的路径时,需要更新这一数组。
推荐游览路径是从一个指定景点开始,不重复的游览完所有景点的路径,即在图中寻找一条由指定结点开始的哈密尔顿路径。这一问题可以通过类似马踏棋盘问题的算法来解决,实质上是采用了图的深度优先遍历和贪心算法的优化。 该算法具体过程描述如下:
图的数据结构与前一个算法相同,采用的还是邻接矩阵。 先将当前位置结点设置为已访问,然后根据当前的结点位置,计算下一步还能走哪些位置,并把这些位置放入到一个集合ArrayList中,每走一步,step+1。 遍历ArrayList中存放的所有位置,看看哪个可以走通,如果走通就继续,走不通就回溯。 最后判断是否完成了任务:使用step和应该走的步数比较,如果没有达到数量,则表示没有完成任务,将整个结果置0。
注意这样的搜索结果会根据策略的不同而改变,不同的策略执行的时间快慢也不一样,在这里,我们可以通过贪心算法对它进行优化,具体过程如下
在马踏棋盘算法获取下一步可以走的位置集合ArrayList之前,我们需要对ArrayList集合中点的下一步的所有集合的数目进行非递减排序。 这样在ArrayList中第一个结点就是下一步应该走的结点,我们需要优先选择它,因为它的后续结点最少,代表着需要回溯的点也越少。
采用了贪心算法优化之后,程序执行的时间效率会大大提高。
校园导游咨询程序实验报告 第2篇
ADT Guide{ 数据对象:V是具有相同特性的数据元素的集合,称为顶点集 数据关系: R={VR} VR={
本系统中采用结构体定义管理员账号密码信息、景点信息,结构体定义邻接矩阵存储图的有关信息。 管理员的存储定义
景点信息的存储定义
系统相关函数定义
int Login_System(); int __Login(); int Registered_Account(); int Login(); void CreateUDG(AMGragh &G); int _s(); int User(); void _s_Menu(); void User_Menu(); void Introduce(); void Map(); void Query(AMGragh G); void All_Print(AMGragh G); void Modify_vertex(AMGragh &G); void Modify_Edge(AMGragh &G); void Floyd(AMGragh G); void Ask(AMGragh G); void Path_Out(AMGragh G, int start, int end);
根据校园导游咨询系统的相关功能,我们可以得到该系统的系统功能结构图,系统结构图和用例图类似,但是更加直观的展示了各个功能的结构。校园导游咨询系统功能结构图如图2所示:
本系统的各个功能模块共涉及18个函数。 相关函数 校园导游咨询系统相关函数及其功能描述如表2所示:
函数的主要关系 校园导游咨询系统函数的调用关系图描述了该系统中各个函数调用关系以及用户使用时的操作流程,通过该图对该校园导游咨询系统的结构功能能有更清晰的认知。函数调用关系图如图3所示:
校园导游咨询程序实验报告 第3篇
(1)设计思想 该模块需要实现系统的管理员登陆功能。首先定义好账号、密码类型,定义标志变量flag。然后进行系统的登陆,首先输入账号,然后输入密码。定义文件指针打开文件,对输入的账号密码和文件中存储的账号信息进行匹配,如果匹配成功,进入系统;如果匹配失败,提示错误并要求重新输入,每次登录有三次机会,三次输入错误则本次登录失败并退出。 (2)涉及的数据结构 本函数涉及到账号密码信息。 (3)流程图 Login函数流程图如图4所示:
(4)关键代码
(1)设计思想 该模块需要实现系统的账号注册功能。首先定义好账号、密码类型,定义标志变量flag。再进行系统的注册,输入账号,定义文件指针打开文件,对输入的账号文件中存储的账号信息进行匹配,如果匹配成功说明该账号已被注册,提示注册失败并退出;如果匹配失败,说明该账号可以被注册,则继续输入密码,然后再次输入确认密码。如果两次密码输入不一致,提示错误并要求重新注册,如果两次密码一致,将账号密码信息存入文件并提示注册成功。 (2)涉及的数据结构 本函数涉及到账号密码信息。 (3)流程图 Registered_Account函数流程图如图5所示:
(1)设计思想 该模块需要实现系统的查询功能,输入待查寻询的景点编号,由于景点信息数量并不是很多,这里采用顺序查找,查找成功之后输出景点代号,信息及简介;若输入景点信息错误,查找失败输出提示该代号不存在。 (2)涉及的数据结构 本函数涉及到顶点信息和图的邻接矩阵。 (3)流程图 Query函数流程图如图6所示:
(1)设计思想 该模块需要实现系统的修改功能。此功能为管理员专属功能,首先输出当前所有景点信息,定义标志变量。输入要修改的景点代号,顺序查找。查找成功将该景点信息清除,重新输入信息并保存,修改成功输出提示;若查找失败提示输入错误。 (2)涉及的数据结构 本函数涉及到顶点信息和图的邻接矩阵。 (3)流程图 Modify_vertex函数流程图如图7所示:
(1)设计思想 该模块需要实现系统的修改功能输出平面图,此功能为管理员专属功能,输入起点和目的地的景点代号,来确定路径。然后对该路径进行查找,如果该路径存在,则对其进行修改;若路径不存在查找失败,提示输入错误。 (2)涉及的数据结构 本函数涉及到顶点信息和图的邻接矩阵。 (3)流程图 Modify_Edge函数流程图如图8所示:
(1)设计思想 该模块需要实现系统的最短路径查询功能,该功能是系统的核心。 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Floyd(佛洛依德)算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。虽然我们可以直接对每个顶点通过迪杰斯特拉算法求得所有的顶点到所有顶点的时间复杂度,时间复杂度为O(n*3),但是弗洛伊德算法更加简洁优雅。 首先输出平面图,然后输入起点和目的地,然后进行判断,输入错误输出提示;输入成功,前面已经通过基本信息建图,通过Floyd求最短路径,从后往前追溯走过的结点,并且用一个数组记录下它的位置,然后再遍历数组输出所经过的每个点的信息。 (2)涉及的数据结构 本函数涉及到顶点信息和图的邻接矩阵。 (3)流程图 Ask函数流程图如图9所示:
校园导游咨询程序实验报告 第4篇
随着高校的发展,校园面积不断扩大,校园内跨区域活动频繁,为了给校内师生和校外人士办公、教学、生活等方面带来更大的便利,以及面对校园信息化建设的全面推广和迅猛发展,本系统将主要通过弗洛伊德算法,求出不同景点之间所需最短路径,方便访客出行,提供导游咨询,进一步加强数字化校园建设。 该系统实现功能如下: 1、多用户类型,能够提供游客和管理员两种用户模式,游客可以直接临时登录;管理员可以通过账号密码登录。可以自由添加管理员账号,并将其存储在文件中。 2、从河南工业大学的平面地图中选取出10个的景点来建立无向图。 3、为来访客人提供图中任意景点相关信息的查询。 4、为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 5、修改、更新有关景点和道路的信息
校园导游咨询系统的使用角色分为两种,一种为游客,仅拥有信息统计查询权限;另一种是管理员,拥有系统所有的权限,包括查询,修改等功能。系统中角色及其各自功能如表1所示:
用户类型 (1)游客:可在校园导游咨询系统上实现对校园信息的查询,查询景点信息和查看校园平面图,查询任意两景点之间的最短路径。 (2)管理员:在实现游客所有功能的前提下,具有更高级的权限,能够一输出所有景点信息,修改,更新各个景点信息,修改,更新各条道路信息。 查看校园详细信息 直接输出河南工业大学基本信息,供游客阅读。 查看该校园平面图 直接输出河南工业大学平面图,方便游客更好的了解学校各景点地理位置。 校园景点信息查询 通过输入的景点序号,查询该景点并输出基本信息,对其进行介绍。 景点最短路径查询 通过输入两个顶点的序号,最其最短路径进行查询,给出景点之间最短距离和详细的出行方式。 输出所有景点信息 管理员专属功能,一键输出所有景点信息,方便浏览管理。 修改景点基本信息 管理员专属功能,输入景点序号,查找该景点并对其景点基本信息进行修改。 修改路径基本信息 管理员专属功能,输入两个景点的序号来确定一条路径,然后对其路径的值进行修改。
根据校园导游咨询系统的相关功能,我们可以得到该系统的简易用例图,用例图较为详细的描述了系统的一些基本功能以及操作流程。校园导游咨询系统用例图如图1所示: