图论论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图论期末论文
论文题目:基于交通咨询系统的最短路径算法与实现
学生姓名:
学号:
专业:
指导教师:
完成日期:2015年 12月 12日
基于交通系统的最短路径算法与实现
摘要
目前在交通咨询领域,最短路径算法的研究和应用越来越多,其中最短路径算法的效率问题是普遍关注并且在实际应用中迫切需要解决的问题。
随着现代生活节奏的加快,以及城市汽车数量的不断增加,交通网络也越来越发达,在交通工具和交通方式不断更新的今天,人们在旅游、出差或者其他出行时,不仅会关心费用问题,而且对里程和所需要的时间等问题也特别感兴趣。为了能够更方便人们的出行,我们就应该以最短路径问题建立一个交通咨询系统。这样的一个交通系统可以回答人们提出的有关交通的所有问题,比如任意一个城市到其他城市的最短路径,或者任意两个城市之间的最短路径问题。
本文通过对最短路径算法的分析,研究和实现,即经典的Dijkstra算法。讨论了算法的思想、原理、实现方法、数据结构还有算法描述。针对现代交通网络现状特点,分析和研究适合道路的经典最短路径算法,探讨了在交通网络路线优化过程中需要特别处理的几个问题,并在理论上给出相应的合理的解决方案。
关键词:交通咨询最短路径Dijkstra算法
引言
最短路径问题一直在计算机科学、交通工程学、地理信息系统、运筹学等学科中是一个研究的热点,它不仅是资源分配问题解决的基础,更是线路选择问题解决的基础,特别是在地图、车辆调度以及路由选择方面有着广泛的应用。最短路径问题最直接的应用当数在地理信息领域中,例如:GIS网络分析、城市规划、电子导航等等。在交通咨询方面,寻找交通网路中两个城市之间最短的行车路线就是最短路径问题的一个典型的例子。
随着交通网络越来越发达,人们在旅游、出差或者其他出行时,不仅会关心费用问题,而且对里程和所需要的时间等问题也特别感兴趣。为了能够更方便人们的出行,我们就应该以最短路径问题建立一个交通咨询系统。这样的一个交通系统可以回答人们提出的有关交通的所有问题,比如任意一个城市到其他城市的最短路径,或者任意两个城市之间的最短路径问题。
本题目的意义在于,用java软件技术实现最短路径算法在交通咨询中的重要应用,对模拟结果进行分析讨论,为将来能够有效解决各大城市的交通问题提供可靠的依据。
一、Dijkstra算法
Dijkstra算法是一个按权值大小递增的次序产生最优路径的算法,用于计算从有向图中任意结点到其他结点的最优路径。设一个有向图G=(V,E),已知各边的权值,以某指定点为源点,求到图的其余各点的最短路径。
1.算法思想分析
1959年狄克斯特拉(Dijkstra)提出一个按路径“长度”递增的次序产生最短路径的算法,即:把图中所有的顶点分成两组,第一组S包括已经确定最短路径的顶点,初始时只含有源点;第二组V-S中包括尚未包括最短路径的顶点,初始时含有图中初源点之外的所有其他顶点。按路径长度递增的顺序计算源点到各顶点的最短路径,逐个把第二组中的顶点加到第一组中去,直至V=S。
2.实现思路
有向网用邻接矩阵cost[][]表示,其中规定:(1)如果两个顶点之间无直接路径,即弧对应权值为无穷大;(2)两个顶点之间有直接路径的,矩阵中的权值就是弧对应的公路长度;(3)对应的值为0。S集合初始存放最短路径的源点,计算过程中将已经确定了最短路径的顶点加到S中去。Dist数组最终存放源点到各顶点的最短路径结果。Path数组最终存放源点到个顶点的最短路径经过的顶点。
3.计算步骤
如下图所示:
由F到A的路径有三条:
F A:24;F B A:5+18=23;F B C A:5+7+9=21
第一条最短路径为与源点V邻接顶点的弧集合中,权值最小的弧。下一条长度次短的最短路径是:假设该次短路径的终点是,则这条路径或者是,或者是,它的长度或者是从V到弧上的权值,或者是V到路径长度与到的弧上权值之和。
引进一个辅助向量D,它的每个分量D[i]表示当前找到的从源点V到每个终点的最短路径的长度。设用带权的邻接矩阵dist[i][j]来表示有向图,dist[i][j]表示弧上的权值,若不存在,则置dist[i][j]为某一最大值。向量S为已找到从V出发的最短路径的终点的集合,其初始值为空集。算法按下面的步骤进行:
①从V出发到图上其余各个顶点(终点)可能达到的最短路径长度的初始值为:
D[i]=dist[ORDINAL(V)][i],Vi∈V
其中ORDINAL(V)表示顶点V在有向图中的序号
②选择Vj,使
D[j]=Min{D[i]|Vi S,Vi∈V}
Vj就是当前求得的一条从V出发的最短路径的终点,且令
S=S∪{j}
即将j加入到S集合中。
③修改从V出发到集合V-S上所有顶点Vk可达到的最短路径长度。如果
D[j]+dist[j][k] 则修改D[k]为 D[k]=D[j]+dist[j][k] ④重复操作(2),(3)共n-1次。最后求得从V到图上其余各定点的最短路径是依路径长度递增的序列。 二、交通咨询系统的实现 1.系统设计流程 该交通咨询系统要完成城市网络图的存储,并要实现求任意一个城市顶点到其他城市顶点的最短路径问题,还要实现任意两个城市顶点间的最短路径问题。故设计要分成三部分,一是建立网络交通的存储结构,二是解决单源最短路径问题;最后时限两个城市之间的最短路径问题。 2. 系统构架设计 首先总体的步骤是: Dijkstra算法的具体流程图如下: 3.系统详细设计 程序源代码如下: //Dijkstra算法 package Test; import java.util.TreeMap; import java.util.ArrayList; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; class Point { private int id;// 点的id