【实训大作业】应用无向网表现学校的校园景点平面图
前言
该作业为学校创新实践基础实训的大作业,因为当时安排在了考试周时间紧张,所以做的比较简陋,基本功能全部实现了,还有一个小bug没改,最后因为里面算法写的不错被打了优秀,放出来给学弟学妹们借鉴了。
搭建平台:Android studio
代码在:https://github.com/13-pieces-teen/schoolTourGuide
一、项目介绍
设计要求:
(1)建图以图中顶点表示主要景点,并存放景点的编号、名称、简介等信息;图中的边表示景点间的道路,存放路径长度等信息。
(2)查询该系统可以查询景点的信息:查询图中任意两个景点间的最短路径; 查询图中任意两个景点间的所有路径。
(3)更新可以进行景点的更新,如去除、增添景点和路径,可以随时对景点间路径长度的更新。
界面要求:
要考虑界面的友好性,让用户操作使用起来非常方便

二、 项目需求分析
(1)校园地图建模
选择一张具有代表性的校园地图,并通过调用百度地图api手段获取路径长度以及大致地点。
选取其中十个具有代表性的南工地标(南苑,体育馆,行政办公室,浦江图书馆,镜湖长廊,亚青村,仁智同和教学区,学府苑,地坤天工试验区,体育馆),设定地图中坐标先行写入app数据库中。

(2)系统功能分析与设计
- 数据库设计——建图及增加路径(景点类,道路类)


- 查询路径算法——全部路径及最优路径
(1)DFS(深度优先遍历算法)
算法原理:DFS算法,一种用于遍历树或图的算法,它会沿着树的深度遍历树的节点,当访问到不满足条件的时候,就会进行回溯,然后重复执行该操作,直到所有节点都被遍历完。
实现基础代码:

(2)Dijkstra(求解单源最短路径的经典算法)
算法原理:Dijkstra算法设置一个集合 记录已求得的最短路径的顶点,初始时把源点 放入 ,集合 每并入一个新顶点 ,都要修改源点 到集合 中顶点当前的最短路径长度值。
实现基础代码:

算法比较:

根据对比可以看出,Djikstra算法在时间和空间上都是优于Floyd算法和Bellman-Ford算法的。不足之处就是DijKkstra算法不能处理含负权边的图。但根据本app的实际情况,地图中的道路长度一定为正数最短行驶时间也一定为正数.所以对于本系统来说.DjKkstra算法的这个缺陷可以忽略不计。因此,本app选用DjKksta算法来计算导航功能中的最短路径问题。
(3) 界面UI分析与设计
- Fragment运用
两个可滑动fragment,分别对应地图以及设定两个界面 - 主地图设计
选取本校具有代表性的一张地图,并在程序内建立如下的带权值无向网图。

- 功能模块设计

三、 具体设计
- 数据库模块搭建
本app基于android自带的数据库sqlite进行增删改查功能的编写。
(1)建表

(2)增加

(3)更新

(4)查询

- 算法与数据库和界面的连接
通过编写的Graph接口,如下:

连接至算法 ,通过java的list数组对编号在数据库中查询,从而建立了带权值的无向网。其中findShortestRoad()函数用来查询最短路径,findAllRoads()函数用来找到两点间所有路径。再通过安卓的notification功能对用户进行告示。

- 地图按钮的实现
其中给各个按钮设置一个点击事件与一个长按事件,并用AlertDialog对用户进行通知。

四、 项目环境配置以及结构
- 运行软件环境及语言
框架:Android Studio 语言:java - 项目框架(main以及res)


- 功能分布


五、 项目运行展示
- 用户运行流程
先添加景点,再添加路径,单击标点即可查询景点的基本信息,长按标点即可进行快捷的景点删除。地图旁四个按钮,分别对应不同操作(路径的增删改查与景点的增改)。



代码分享
https://github.com/13-pieces-teen/schoolTourGuide
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
