基于javaweb最短路径公交查询系统设计与实现(论文下载)
Posted weixin_40228600
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于javaweb最短路径公交查询系统设计与实现(论文下载)相关的知识,希望对你有一定的参考价值。
【摘 要】随着互联网的技术的不断更新发展,人们生活节奏也在不断的加快,对于网络的依赖也越来越紧密,尤其是在等公交,经常会错过班次,但又不知道,下次班次几点发车,这样会导致乘客花掉大把时间在等待,如果可以掌握发车动态及最短乘车路径,乘客就可以随时合理安排自己的时间,也不会经常出现公交车站出现拥挤现象。
本系统通过IDEA2020开发者工具开发,主要基于vue语法及ES6实现,使用的技术有mysql数据库、mybatis驱动框架以及tomcat服务端部署。
该项目公交查询系统分为前台和后台,前台主要是给用户提供公交查询使用,是用户的操作界面,它的功能包括在公交线路搜索和公交站点查询。而后台主要给管理者使用,管理者可以对站点添加、删除,同时可以对站点进行修改,并且还能查看站点的所有信息;可以对车次行线添加、删除,同时可以对车次进行修改,并且还能查看车次的所有信息。
【关键词】java开发,mysql数据库,查询系统,公交查询
[Abstract] with the continuous development of Internet technology, people’s life rhythm is also accelerating, and the dependence on the network is becoming more and more close, especially when waiting for public transportation, they often miss the shift, but they don’t know. The next shift will leave at several points, which will lead to passengers spending a lot of time waiting. If you can master the departure dynamics and the shortest way to ride, Passengers can arrange their time reasonably at any time, and there will not be congestion in bus stops.
The system is developed by the developer tool of idea2020, which is mainly based on the Vue syntax and ES6. The technologies used include MySQL database, mybatis driver framework and Tomcat server deployment.
The public transportation inquiry system of the project is divided into the front desk and the background. The front desk mainly provides the users with the public transport query and is the user’s operation interface. Its functions include the public transport line search and the public transport station query. The background is mainly used by managers. Managers can add and delete sites, modify the site and view all the information of the site; You can add and delete the train number line, modify the train number, and view all the information of the train number.
[Key words] java development, MySQL database, query system, public transport query
目录
1 绪论 6
1.1 项目开发背景及意义 6
1.2 项目主要的内容 6
2 相关技术介绍及系统环境开发条件 7
2.1相关技术介绍 7
2.2系统环境开发条件 8
3.1可行性分析 9
3.2需求分析 10
3.2.1系统总体概述 10
3.2.2功能性需求 11
3.2.3非功能性需求 13
3.2.4流程图设计 13
3.2.5系统ER图设计 14
3.3 数据库设计 15
3.3.1数据库设计的原则 15
3.3.2数据库表的设计 15
4系统功能模块实现 16
4.1 页面功能实现 16
4.1.1公交线路模块实现 17
4.1.2公交路段管理模块实现 18
4.1.3 公交线路换乘管理模块实现 19
5 系统测试 22
5.1系统调试的目的和意义 22
5.2功能测试用例 23
6总结 26
参考文献: 27
1 绪论
1.1项目开发背景及意义
随着智能电脑端的发展及互联网的兴起,电脑端作为开放性平台的系统,在市面上受到广大消费者的喜爱,它不仅是一个开放性的平台,而且可以接入很多外界接口,实现数据的对接,尤其在接入公交系统入口上也比较方便自如。
通过该公交查询系统的实现,可以让等待的用户,合理规划好自己的出行时间。也在某种程度上改善交通拥塞、噪声干扰等一些问题,而且还可以推动城市的建设与进步。
1.2项目主要的内容
本文根据该软件的特性需求进行研究分析主要内容:首先介绍项目的开发的背景和研究的意义;二是介绍了对项目开发过程中所用到的相关技术的理论知识和环境的使用;三是根据业务的需要,对系统进行分析,从多个角度讲解开发的意思。四是根据需求分析内容,讲解开发功能,及实现的步骤。五是简要介绍了测试用例,让我们在顺利地完成程序的开发工作后,通过这些测试,快速有效地找出了系统存在的不足之处并及时对其进行改动和完善。
2 相关技术介绍及系统环境开发条件
2.1相关技术介绍
该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具IntelliJ IDEA 2020.1.1 x64,因为该开发工具,内嵌了Tomcat服务运行机制,可不用单独下载Tomcat server服务器。
Java作为面向对象的开发开言,它不仅吸收了很多语言的各种优点,而且它的整个生态在所有语言中开放性是最好的,在学习上,可以找到很多类似的功能代码,供以后参考学习,像目前asp.net开发语言在很大程度上都在模仿java的思维,如果学会java编程,在去掌握另一门语言,学起来就非常的快,因为它的简单性、面向结构性,减少了代码管理的复杂度,让编程过程更加的清晰、逻辑解耦性也更加分层化。
MySQL是开源的关系型数据库,因为是开源所以没有版权的纠纷,现在很多公司都在利用mysql作为数据库的存储,不仅它的存储速率比较快,而且还可以在它的基础上进行二次开发,定制出更适合公司的数据库。
Vue的语法底层实现了双向数据绑定的原理,在重新更细或发布项目时候,不需要额外的重启项目,代码功能模块的实现,就可以在浏览器上反映出来,实现快速响应,不像有些可编译的语言,需要加载很多的插件,才能启动。
Spring封装了很多的java类库文件,在开发过程中,不需要写太多复杂的类文件,只需要引用spring这个框架,就可以完成快速开发的需要,所以Java编程的逻辑代码就变得比较清晰,各层之间的解耦性也比较强,可重用性也得到了很好的发挥,使得开发难度也更加轻松容易,它的主要两个特性就是依赖注入、面向接口思想;(AOP)切面思想;
IntelliJ IDE与eclipse对比,这两款都是java编程语言开发工具,与之不同之处,IDEA与第三方插件市场接入更多,开发效率与智能提示方面比eclipse更智能,在环境配置生成上IDEA也比较快,界面设计也比较干净简单。
2.2系统环境开发条件
该系统采用B/S架构,前端框架使用微信开发者工具开发,后台数据实现使用MYSQL
序号 软件环境 版本 备注
1 windows操作系统 10
2 数据库MYSQL 8.0
3 编程开发工具软件IDEA 2020.2
本系统对客户端以及服务器的要求
客户端配置:
CPU:intel i5以上
内存:4G以上
浏览器:谷歌浏览器或者更高版本
服务器配置:
开发工具:Ecilpse IDE for Java EE
CPU:P4 3.2GHz
内存:1GB以上
硬盘空间:40GB
操作系统:Windows7、Windows XP或者Windows 2003
网络支持:因特网或校园网
数据库:MySQL 5.5
Java开发环境:JDK 1.8以上
Web服务器:Tomcat 8.0
3 系统的需求分析与设计
作为软件前期开发过程中,需要对项目进行需求分析,首先要了解业务具体做什么,实现什么样的功能,在功能模块中细分每个功能模块的使用背景,只有这样在软件开发中,才不会重复出现因为架构设计的缺陷,导致在次设计底层数据结构的发生,此外,有些非功能的特细,比如数据库性能、安全性的考虑、网速的反映时间都是作为需求分析的约束条件,也是项目开发完成后,在运行时需要分析的目标。
3.1可行性分析
在系统开发的过程中系统的可行性分析是必不可少的,可行性的研究就是评估问题是否能得到解决并且是要以最少的时间和最少的代价来解决。为实现上面的目标还要必须考虑到解决这些问题的方法的优点和缺点,还要考虑到实现了这些系统规模的开发带来的经济效益。这里可以用技术的可行性,操作的可行性,经济的可行性对我们的系统进行可行性的研究。
3.1.1技术性:在系统开发的过程中系统的可行性分析是必不可少的,可行性的研究就是评估问题是否能得到解决并且是要以最少的时间和最少的代价来解决。为实现上面的目标还要必须考虑到解决这些问题的方法的优点和缺点,还要考虑到实现了这些系统规模的开发带来的经济效益。这里可以用技术的可行性,操作的可行性,经济的可行性对我们的系统进行可行性的研究。
3.1.2经济性:开发一套成熟的软件,都需要经过一段漫长的过程,这里设计到软件的需求分析、制定计划,开发人员、测试环节、调试过程,都需要资金及人力的投入。而这套软件的开发,可以通过网上开源源码及相关资料的学习,在硬件及电脑使用上,都是自己所用,所以在开发成本上可以忽略不计。
3.1.3操作性:本系统设计到的功能主要有登陆模块、车次管理模块、站点管理模块,这些功能模块的相关知识,都是平常所设计到的常用功能,在操作上都是可以实现的。
3.1.4数据完整性:本系统设计到的功能主要有登陆模块、车次管理模块、站点管理模块,这些功能模块的相关知识,都是平常所设计到的常用功能,在操作上都是可以实现的。
3.1.5系统框架性:Springboot(Springboot+MyBatis)框架从实质上来说,就是Spring、springMVC与MyBatis三个框架整合而成的,因为Spring MVC是Spring框架中用于Web应用开发的一个模块,是Spring提供的一个基于MVC模式的轻量级Web框架。而SSM框架将整个系统划分为View层、Controller层、Service层、Dao层。
Springboot解决了配置ssm的繁琐,其实它的底层原理,已经事先配好了ssm,并且解决了xml的烦劳,都是通过注解的方式,直接调用,以前xml文件的方式基本全部淡化了,让开发者更多的时间专注于业务上的开发、使用。还有就是springboot的配置文件yml,可以动态配置参数,通过注解注入的方式,获取到数据库连接池,以及所需要的配置属性文件。
当用户发送URL请求时,根据DispatcherServlet的配置,该请求被DispatcherServlet拦截,并根据HandlerMapping找到处理响应请求的Controller;Controller处理完后,返回ModelAndView对象;该对象告诉DispatcherServlet需要哪个视图来进行数据模型的展示,DispatcherServlet根据视图解析器把Controller返回的逻辑视图名渲染成真正的视图并输出,呈现给用户。Spring MVC的整个请求处理流程,其中用到的组件有前端控制器(DispatcherServlet)、处理器映射器(HnadlerMapping)、处理器适配器(HandlerAdapter)、Handler控制器(Controller)、视图解析器(ViewResolver)、视图(View),其中DispatcherServlet、HnadlerMapping、HandlerAdapter、ViewResolver对象的工作是在框架内部执行的。
SSM 框架中 ,Spring MVC负责接收响应用户请求;Spring负责处理户请求 ,统一管理 mapper、service、controller;MyBatis 负责连接数据库,建立实体类与表的联系。客户端、服务器与数据库三者并非相互交、直接访问的关系,用户每次请求的实现都需要层层架构的调用处理。
3.2需求分析
为软件前期开发过程中,需要对项目进行需求分析,首先要了解业务具体做什么,实现什么样的功能,在功能模块中细分每个功能模块的使用背景,只有这样在软件开发中,才不会重复出现因为架构设计的缺陷,导致在次设计底层数据结构的发生,此外,有些非功能的特细,比如数据库性能、安全性的考虑、网速的反映时间都是作为需求分析的约束条件,也是项目开发完成后,在运行时需要分析的目标。这既然是一个管理性网站,就应该了解很多网站内容的共性,便于提炼出来,同样的,对于一个图书管理网站,就需要有自己的管理账号来进行登录,便于方便的管理用户借阅书籍的情况。通过了解用户的需求,可以知道操作简单的系统更易受到用户青睐,同时能够准确、完整的对信息进行管理。图书管理平台在对需求做相应的分析后,得出结论,系统主要由车次管理功能、 站点管理功能、查询管理功能。
3.2.1系统总体概述
通过了解用户的需求,可以知道操作简单的系统更易受到用户青睐,同时能够准确、完整的对信息进行管理。公交查询信息平台在对需求做相应的分析后,得出结论, 该项目管理系统主要基于B/S设计模式,系统设计的功能有: 车次管理功能、 站点管理功能、查询管理功能。其系统结构如图3-1所示:
3.2.2功能性需求
本系统是利用现代化的计算机网络技术将传统创业信息宣传方式整合,按照实践过程设计完成的。同时完善服务,初步设计一个微信智能停车系统平台以利于相关的事务操作。为了使系统在各项管理中发挥更大的作用,实现计算机信息化高效的管理,现将开发目标功能需求介绍如下:
(1)公交线路管理模块
管理员有权进行微信小程序系统的管理,包括管理员权限设置、车次管理、站点管理。
(2)公交站点管理模块
拥有管理权限管理员,可进行车次列表的查看,以及对应的车次增加、删除、修改、查询操作。
(3)公交路线搜索管理模块
拥有管理权限管理员,可进行站点列表的查看,以及对应的站点增加、删除、修改、查询操作。
本系统是利用现代化的计算机网络技术将传统创业信息宣传方式整合,按照实践过程设计完成的。同时完善服务,初步设计一个公交智能查询系统平台以利于相关的事务操作。为了使系统在各项管理中发挥更大的作用,实现计算机信息化高效的管理,现将开发目标功能需求介绍如下:
(1)公交线路管理模块
拥有管理权限管理员,可进行车次列表的查看,以及对应的车次增加、删除、修改、查询操作。
表3-2车次管理用例描述
用例名称 车次管理
参与者 管理员
描述 管理员提供车次管理新增、修改、删除、查阅等功能
前置条件 1管理员成功登录系统
2管理员只能对已存在的数据进行修改和删除
后置条件 无
事件流 (1)管理员查看车次管理修改数据
(2)管理员添加车次管理数据
(3)管理员删除车次管理数据
补充说明 (a)新添加的车次管理数据不符合要求时会添加失败
(b)修改的车次管理数据不符合要求时会修改失败
(2)公交站点管理模块
拥有管理权限管理员,可进行站点列表的查看,以及对应的站点增加、删除、修改、查询操作。
用例名称 站点管理
参与者 管理员
描述 管理员提供站点管理新增、修改、删除、查阅等功能
前置条件 1管理员成功登录系统
2管理员只能对已存在的数据进行修改和删除
后置条件 无
事件流 (1)管理员查看站点管理修改数据
(2)管理员添加站点管理数据
(3)管理员删除站点管理数据
补充说明 (a)新添加的站点管理数据不符合要求时会添加失败
(b)修改的站点管理数据不符合要求时会修改失败
3.2.4流程图设计
公交查询系统工作流程为: 用户登陆到控制台页面,可以对车次、站点进行添加、修改、删除操作,也可以在查询页面对公交站点路段的查询操作。以下是总体的流程图设计如图3-2:
3.2.5系统ER图设计
管理员用户可以对车次进行管理,包括线路、出发时间、起点名称、结束名称等,也可以对站点进行管理,包括路段名称、路段时间、路段距离、终点名称,当车次和站点录入完信息后,可以在查询页面里面对车次进行站点查询。如图3-3系统结构ER:
车次属性用例图主要包括公交线路、出发时间、起点名称、结束名称。如图3-3车次用例图:
站点功能模块主要是用来记录站点的名称名、起点名称、终点名称、路径时间、路径距离等主要信息。如图3-5车次ER:
3.3 数据库设计
3.3.1数据库设计的原则
在建表时,表的主键要尽量的少,在表与表之间建立外键关系时,也要尽量的少,尽量减少数据库查询和CRUD操作的复杂度;系统恢复性操作,在设计数据库文件中考虑到表如果出现损坏,在短时间内可以快速的恢复,减少成本的支出。在数据库系统开发过程中,一般都需要满足以下几个特点:字段冗余少,就是在设计表字段时,尽量减少不必要多余的字段出现,在设置表的参数类型时,合理控制参数字段长度;保密性和安全性要强,不要把系统关键字设置在表中,防止sql注入攻击;表与表之间的管理性要合理化,尽量减少三张以上的管理表查询,减少sql查询带来的系统性能的下降。
3.3.2数据库表的设计
管理员表(user_name):用户编号、用户名称、用户密码、电话、邮箱
4系统功能模块实现
本次系统采用 java 和 mysql 相互结合的架构来进行开发系统程序的应用,系统中所有与程序密切相关的事情和操作都时间上通过一个与数据库相关的类文件来进行实现,很大程度上增强了代码的耦合度,当得到数据库的类型等信息发生变化后直接进行修改与其相关的类别和文件就完全可以了,不再因为此而需要每一个页面都进行任何修改。除此之外,本系统还很好地解决了简体中文的困难,也就是在配置文件中添加了编码语言方式的多种形式来得到解决的,本系统另外一个重要的特征就是,该系统对于数据库的所有操作都单独地被写在一个分类里,这样只需要访问这个分类就能够对系统的所有数据库进行操作,不用对每个分类的页面去做一个写数据库的分类操作,很大程度的从而增强系统的整体集成度。
4.1 页面功能实现
4.1.1公交线路模块实现
当用户进入公交线路页面系统时,在搜索框中输入要查询的线路,点击查询后,前端会将查询的参数发送到后端,在数据库中匹配相应的数据,如果查询到,就会显示结果,如果没有查询结果,系统提示未找到该记录如图 4-1 车次查询界面图所示。
图 4-1 车次查询界面图
部分主要代码如下:
/**
* 找到所有的路线
* @return
*/
@RequestMapping(value = “/roadline_findAllRoadlineByJson.action”,
produces = “application/json;charset=UTF-8”)
@ResponseBody
public String findAllRoadlineByJson(){
List roadlist=roadlineDAO.findAll();
gson=new GsonBuilder().setExclusionStrategies(exclusionStrategy).create();
Map pageMap=new HashMap<>();
pageMap.put(“rows”,roadlist);
pageMap.put(“linestring”,roadUtil.getLineStringPointsFromRoadList(roadlist));
return gson.toJson(pageMap);
}
算法实现:
路径/roadline_findAllRoadlineByJson.action接口主要用来展现所有路线信息,他会调用findAllRoadlineByJson()方法中的roadlineDAO.findAll()方法来查询所有站点信息,并将查询到的结果以gson方式进行格式化输出,返回到前端页面中去。
4.1.2公交路段管理模块实现
当用户进入微信小程序系统时,在搜索框中输入要查询的站点,点击查询后,前端会将查询的参数发送到后端,在数据库中匹配相应的数据,如果查询到,就会显示结果,如果没有查询结果,系统提示未找到该记录如图 4-2 站点查询界
面所示面图所示
图 4-2 站点查询界面
部分主要代码如下:
private Long id;
private Roadstation roadstationByEndid;
private Roadstation roadstationByStartid;
private String name;
private Double elapsedtime;
private Double distance;
该代码的申明主要定义对象Roadsection 的属性参数,便于在下面的方法中灵活的使用,定义站点的唯一id,也是主键,roadstationByStartid站点的开始位置,roadstationByEndid站点的其实位置;站点的名称name;使用的时间elapsedtime;distance定义划分的分隔符。
@RequestMapping(value = “/roadsection_queryRoadSection.action”,
produces = “application/json;charset=UTF-8”)
@ResponseBody
public String queryRoadSection(Roadsection model, @RequestParam Integer page,@RequestParam Integer rows){
Map pageMap=new HashMap<String, Object>();
pageMap.put(“total”, roadsectionDAO.getCount(model.getName()));
System.out.println(roadsectionDAO.getCount(model.getName()));
List roadSectionList=roadsectionDAO.queryWithPageAndSize(model.getName(), page, rows);
pageMap.put(“rows”, jsonUtil.roadsectionList(roadSectionList));
return gson.toJson(pageMap);
}
前端访问路径roadsection_queryRoadSection.action,其实就是在调用queryRoadSection()中的方法,前端传过来的对象站点Roadsection用于接收属性参数,在方法内部初始化Map ,用来封装分页的基本参数;roadsectionDAO.queryWithPageAndSize()方法的调用是从数据表中查询所有站点信息,并赋值到List 定义的集合中去,并将赋值的roadSectionList,封装到map中的rows属性中去。
4.1.3 公交线路换乘管理模块实现
当用户输入起始地址和结束地址时,系统会在地图上地位两个位置,并通过连线的方式在地图上显示,并给出乘车车次,站点路线、及开始时间和结束时间。
部分主要代码如下:
/**
* 公交搜索算法基于Dijsraz最短路径算法
* @param startStation 起始站点
* @param endstartStation 结束站点
* @param type 类型 0为 权值为时间 1位权值为距离
* @return
*/
public Map<String,Object> findBusSearch(String startStation,String endstartStation,int type){
Map<String,Object> map=new HashMap<>();
Roadstation startstation=findRoadStation(startStation);
Roadstation endstation=findRoadStation(endstartStation);
if(startstation!=null&endstation!=null){
//起始站点有数据
FloydInGraph graph=new FloydInGraph();
graph.initMap(roadsectionDAO.findAll(),type);
double weight=graph.findMIXDistance(startstation,endstation);
if(weight!=Double.MAX_VALUE){
map.put(“roadstations”,jsonUtil.roadStationList(graph.findelapsedStations()));
map.put(“type”,type);
map.put(“weight”,weight);
map.put(“status”,“success”);
}else{
map.put(“status”,“没有这样的最短路径”);
}
}
else{
//没有这样的起始站点
map.put(“status”,“找不到这样的起点终点的站台,请输入正确的起点和终点的站台。”);
}
return map;
}
}
算法实现:当用户点击提交按钮后,后端会接收到3个参数:开始站点startStation、结束站点endstartStation、type查询的类型,如果type=1按最短路径查询,如果type=0按最短时间查询,不过按照最短路径查询还是最短时间路径查询,都需要调用findRoadStation()方法,查询开始地址和结束地址是否存在录入的数据库中,如果 if(startstation!=null&endstation!=null)查询到都为空,直接将查询结果map.put(“status”,“找不到这样的起点终点的站台,请输入正确的起点和终点的站台。”);添加到map中,然后直接返回给前端;如果开始站点和结束站点都不为空时,则初始化FloydInGraph 对象,这个对象封装了最短路径的方法findMIXDistance()这个方法的工具类dijkstra算法,也是网上用的比较多的,在下面有单独介绍,按照权重值的方式计算最短路径或时间的方法,其实就是通过一个list的数组集合,进行排序,刷选出权重值最大的哪个最为最短时间或最短路线,以下具体介绍实现。
这里用到了dijkstra最短路径算法步骤:
public class DijkstraAlgorithm {
Set open=new HashSet();
Set close=new HashSet();
Map<String,Integer> path=new HashMap<String,Integer>();//封装路径距离
Map<String,String> pathInfo=new HashMap<String,String>();//封装路径信息
public Node init(){
//初始路径,因没有A->E这条路径,所以path(E)设置为Integer.MAX_VALUE
path.put(“B”, 1);
pathInfo.put(“B”, “A->B”);
path.put(“C”, 1);
pathInfo.put(“C”, “A->C”);
path.put(“D”, 4);
pathInfo.put(“D”, “A->D”);
path.put(“E”, Integer.MAX_VALUE);
pathInfo.put(“E”, “A”);
path.put(“F”, 2);
pathInfo.put(“F”, “A->F”);
path.put(“G”, 5);
pathInfo.put(“G”, “A->G”);
path.put(“H”, Integer.MAX_VALUE);
pathInfo.put(“H”, “A”);
//将初始节点放入close,其他节点放入open
Node start=new MapBuilder().build(open,close);
return start;
}
最短路径算法原理描述:
①将顶点A排队,并设置顶点A已被访问。
②判断队列是否为空。如果不是,顶点a将被排除在队列之外。同时判断顶点a的相邻顶点B、e、D是否被访问过。如果没有,将顶点B、e和D排队,并将它们设置为已被访问过。然后将排队的顶点B、e、D分别指向它们的前导顶点a,判断顶点B、e、D是否为目的地顶点I,如果不是,继续下一步3。
③判断队列是否为空,如果不为空,顶点B将被挤出队列,判断顶点B的相邻顶点e是否已被访问。判断顶点B的相邻顶点e已经被访问,则顶点e不指向它的前面顶点B。
④判断队列是否为空。如果不是,顶点e将被排除在队列之外。同时判断顶点e的相邻顶点F和h是否被访问过。如果没有,将顶点F和H排队,并设置它们已被访问。然后将排队顶点F和h分别指向它们的前顶点e,判断顶点F和h是否分别为目的地顶点I。如果不是,执行下一步5。
⑤判断队列是否为空。如果没有,顶点D将被排除在队列之外。同时判断顶点D的邻接顶点g是否被访问过。如果没有,对顶点g排队并设置它已经被访问过。然后将排队的顶点g指向它们的前导顶点D,判断顶点g是否是目标顶点i。如果不是,继续下一步。
⑥判断队列是否为空,判断合并后的顶点f是否是目标顶点i。如果不是,则顶点f在队列外,顶点f的相邻顶点C是否被访问过。如果没有,则顶点C将被排队并分别设置为已访问过,然后排队的顶点C将分别指向它们的前导顶点f。判断顶点C是否是目标顶点i,如果不是,继续下一步7。
⑦判断队列是否为空。如果没有,顶点h将被排除在队列之外。同时判断顶点h的相邻顶点i是否被访问过。如果没有,对顶点i排队,并将其设置为已经被访问过。然后将排队的顶点i指向它们的前导顶点h,并分别判断顶点i是否是目标顶点i。将顶点i放到堆栈上,进行下一步8。
⑧判断I的前导顶点是否为空。如果不是,就把前面的顶点放到堆栈上。判断回路中先导点的先导点。如果不是,就把它放在堆栈上,直到它为空。这样,堆栈中的所有顶点都在堆栈外,而堆栈外的顶点a - > e - > H - > I是要找到的最短路径。
以上是关于基于javaweb最短路径公交查询系统设计与实现(论文下载)的主要内容,如果未能解决你的问题,请参考以下文章