摘 要: 确定两点之间最短路径,通常要求该路径满足两点之间的权之和最小。为此采用层次遍历图的思想,设计了一种新的结构存放路径选择信息,找到一种确定这种最短路径的算法,并给出了算法描述以及实例。
关键词: 邻接表;边链表;层次遍历图;队列;最短路径
在实际生活中常常会遇到求最短路径问题,如:从A地到B地有若干条路可选,每条边上都标有象征某种意义的权值。有人选择路径的方法是希望总路径的权之和最小;有人选择中转次数最少;而还有人希望在中转次数最少的条件下尽量权之和最小。确定权之和最小的最短路径算法目前国内外公认较好的是Dijkstra算法和Floyed算法,这两种算法已被广泛用于生活中各个领域,如:网络寻优、道路交通等。但这些算法都只单纯地考虑路径中权之和达到最小,而并未考虑路径中边数能否也最少。而在目前高科技迅猛发展的经济时代,人们在选择出行方案时可能会更加注重降低因中转而产生的精力和时间的消耗而不会过多在意为此多出的花费。因此,许多情况下出行的人们会考虑中转次数尽量少,然后在相同的中转次数下优先选择花钱最少的路径作为选择方案。
本文提出了一种确定两个顶点之间经过的边数最少且相同边数前提下权值之和最小的最短路径的一种算法。在本算法中,采用邻接表存储结构存储原始图,在层次遍历法的思想遍历图的基础上进行了修改,设计了一种新的结点结构存放路径选择中的信息。当遍历到终点结点出现时,终止遍历过程,然后在目标结构中从该终点开始按指定的指针域层层向上搜索并输出经过的每一个结点序号直到指针为空为止。输出的序列就是要找的最短路径。
1 数据结构的设计及算法
设有n个顶点的一个无向图,图中每条边都标有代表某种意义的权值,现求从顶点i