ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:429.87KB ,
资源ID:11542929      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11542929.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计导航系统.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计导航系统.docx

1、数据结构课程设计导航系统数据结构课程设计导航系统一、课程设计内容描述1.问题描述交通网络中常常提出这样的问题:从甲地到乙地之间是否有公路连通?在有多条通路的情况下,哪一条路最短?导航系统便可以解决这样的问题。与此同时,城市的扩建,新地点的添加,新道路的修建,需要导航系统具备添加新地点,添加新路线的功能。而受一些生态工程的实施,例如退耕还林还草,和自然条件的影响,本来存在的一些地点或道路需要删除或更改,此时导航图还应该及时的更新,以适应新的查找两点间最短路径的需要。除此之外,用户的查找应是极为方便的,对于最短路线,新添加的地点和路径以及删除的地点和路径的感知应是直观的,这样才能真正的给使用导航系

2、统的人们提供方便。2.需求分析导航系统的基本功能是:1、输入:要查找最短路径的起点和终点(已知交通图);2、输出:起点至终点的最短路径;3.、添加,删除地点,更新交通图;4.、友好的界面交互;5、对此导航系统功能的扩展。二、实现思想,算法描述使用语言:JAVA编译环境:Eclispe SDK 3.0.21.概要设计导航系统的实现功能:1、用户输入需要查找的最短路线的起点城市名和终点城市名输入有两种方式:1.在指定文本框输入城市名称,2.在交通图中点击起点和终点确认后,输出最短短路径并在交通图上标示;2、添加新地点并在交通图上显示;3、添加新路线并在交通图上显示;4、删除某地点并在交通图上显示;

3、6、删除某路线并在交通图上显示;与用户交互过程大致如图2.1程序的大体构架,主要模块如图2.2 在做添加地点,添加路线,删除地点,删除路线的时候,存储所有点的List,存储交通图路径长的Graph,画图类DrawPanel,分别做相应变化,显示统一的结果。2.主要函数设计思想及伪代码1)函数shortestPaths(int s, double d, int p)所用数据结构: 二维数组 链表(java.util.LinkedList)思想:利用Dijkstra 算法可以是新解决最短路径的问题,它通过分步方法求出最短路径。每一步产生一个到达新的目的地的顶点的最短路径。下一步所能达到的目的顶点通

4、过如下贪婪准则选取:在还未产生最短路径的顶点中,选择路径长度最短的目的顶点,也就是说,Dijkstra 的方法按路径长度顺序产生最短路径。简单来说,就是从源点出发,按照长度不减得次序依次找出到达其他各顶点的最短路径及长度。伪代码:public void shortestPaths(int s, double d, int p) /获取顶点s到其它顶点的最短路径,d为路径长度,p为前继顶点 初始化di = a si 对于邻接于s的所有顶点j,置pi = 0; 对于pi = 0的所有顶点建立链表 L; while(L不为空)寻找L中d最小的顶点v 从L中删除顶点v;I = v; 对于所有的顶点 j

5、 if(j与i邻接&还未到达顶点j)更新dj 值为min dj , di + aij 更新dj 值为min dj , di + aij if(dj发生了变化&j还未在链表L中) 设置pj = L; 并把j加入链表L时间复杂性分析:该程序的时间复杂性为O(n)。任何最短路径算法必须至少对每条边检查一次,因为任何一条边度有可能在最短路径中。因此这种算法的最小可能时间为O(e)。由于使用耗费邻接矩阵来描述交通图,仅决定哪条边在有向图中就需要O(n)的时间,因此,采用这种描述方法的算法需花费O(n)的时间。2)函数deletePoint(int i)所用数据结构: 二维数组思想:在交通图中删除某个地点

6、,不仅需要对点本身删除,还需要把包含该点的路径全部删除,我采用将该点下方及右方的所有的顶点包括边前移,这样虽然会耗费一定的时间,但是却会给存储交通图的二维数组空出一定的空间供新的顶点插入,这样如果再添加城市,就在一定程度上避免了resize()函数的调用,节省了添加顶点的时间。同时又因为这种添加顶点,删除顶点的操作在实际情况下不会频繁发生,这种移动还是可行的。伪代码:/删除指定顶点vpublic Graph deletePoint(int v) for (int i=v ;in ;i+) 所有的边权值向上平移一行for (int j=v ; jn ; j+)所有的边权值向左平移一列空出的位置设

7、为初始值NoEdge顶点数减一;return this;时间复杂性分析:该程序的时间复杂性为O(n)。具体的时间复杂性与要删除的顶点在加权无向图中的具体对应编号有关,具体的时间复杂性为O( (n-v+1) ),当要删除顶点的编号为1时,时间复杂性便为O(n).。3)函数Paint(Graphics g)所用数据结构: 列表(java.util.ArrayList)思想:该函数是类DrawPanel 最主要函数,用于画交通图,交通图的面板本质上一个画图板,只是所画的点和线根据交通图的实际变化而变化。在这个方法中用到了多个ArrayList的结构,为交通图的实现提供了基础。伪代码:Graphics

8、2D g2d; private ArrayList a ;/存储图中所有顶点坐标 private ArrayList b ;/存储图中所有路线的起始点坐标 private ArrayList c ;/存储图中所有路线的终止点坐标 private ArrayList d = new ArrayList();/依次存储最短路径途径点坐标 private ArrayList e = new ArrayList();/存储添加的新顶点,做取消操作时取消添加的顶点 ArrayList f = new ArrayList();/用于存储鼠标点击获得的查询最短路径的两点坐标 ArrayList w = ne

9、w ArrayList();/用于存储各条路径的长度 private ArrayList name = new ArrayList();/用于存储个地点名称 public void paint (Graphics g) 调用父类的paint方法; 做背景色等相关设置; g2d = (Graphics2D) g; 设置画笔颜色为黑 for(int i=0;ib.size();i+) 以b中点作为起始点,c中对应的点作为终点,画路径; 在路径的中间位置写入weight中的对应的路径长度 设置画笔颜色为蓝for(int i=0; ia.size() ;i+) 以a中的点作为圆心画小实心圆作为地点 f

10、or (int i=0 ; iname.size();i+) 以name中的字符串在顶点对应的位置写地点名称 for (int i=0 ;ie.size();i+) 设置画笔颜色为面板背景色 取消添加的顶点 for(int i=0 ;id.size()-1;i+) 设置画笔颜色为红,标识最短路径 for(int i=0; ic , 路长为6.6 km如图3.7所示,按添加路线确定添加,地图中就显示出新添加的路线及其长度,如图3.8所示.图3.7图3.85.删除地点用户在相应文本区内输入要删除城市的名称,例如删除城市b, 则在删除地点的文本框中输入地点名b,如图3.9所示,按删除键确定删除,地图

11、中就显示出删除该城市后的模样,城市b及其所有与他相连的路径都删除,如图3.10所示.(删除前的地图为图3.1中的地图)图3.9图3.106.删除路线用户在相应文本区内输入要删除路线的起点和终点的名称,例如删除路线f-a, 则在删除地点的文本框中输入起始f,终止a,如图3.11所示,按删除路线键确定删除,地图中就显示出删除该路线后的模样,如图3.13所示.(删除前的地图为图3.12中的地图)图3.11图3.12图3.137.获得帮助用户点击菜单栏中的帮助(ALT+H),可获得相应的使用说明。如图3.14,3.15所示。图3.15图3.147.获得当前时间用户点击菜单栏中的系统(ALT+S)系统时

12、间,可获得当前时间。如图3.16所示。图3.16四、调试分析问题一:现象:添加新的地点时,数组出现越界问题。图3.1原因: 在添加操作过程中,有可能调用resize()函数来扩充数组的容量,在初始的构造方法中设置参数顶点n,与最大容量max的关系为max = n + 1 ;而在复制原有元素的构成中误认为顶点n,与最大容量max的关系为max = n ;for循环时都循环了一次,所以出现了数组越界的问题,统一上下的参数关系后,该问题就解决了。问题二:现象:在写DrawPanel这个类时,想在除了paint()方法外的其它方法中传入参数Graphics g,但是做了多种尝试都无法实现。原因:上网查

13、阅了相关资料后得知,类Graphics 是个抽象类,无法把它作为参数传入其它方法,也不可以new这个类的对象。于是采用现在的用不同的列表存储所有需要画图的信息,用一定的限制在paint() 方法中做所有的画图操作,在其它需要更新图的方法中,修改相关的队列,repaint();实现更新。问题三:现象:查询最短路径时,采用鼠标点击输入,完成一次查询后,继续执行下一次查询时,上次查询所标示的红色的点无法恢复。原因:当时也想到了清空记录这两个点的ArrayList,但是找不到合适的位置清空,最初把清空的写在鼠标单击获取点的坐标,然后放入数组后,若size等于2就清空,但是忽视了,若是这个时候清空在执行repaint();方法时,还是无法标记这两个点,最终把代码加在一进入mousePressed这个方法后,才解决了问题。问题四:现象:异常的处理。原因:异常的处理包括太多种情况,也是在调试过程中慢慢的补充,完善。我所考虑到的的异常处理情况有,查询最短路径时起始或终止地点不存在;添加新地点时用户没有输入新地点名称及没有确定新地点位置;添加路径时路径已经存在(若想改变路径长度,可先删除该路径,再重新添加,写入新的路径长度);添加路径时输入的路径长度不是一个数字;要删除的地点本身不存在;要删除的路径本身不存在等。基本上处理了应该处理的异常。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2