9、狄克斯特拉算法

      广度优先搜索是用来查找图模型中边数最少的路径,但如果图模型是加权图——边上考虑权重,则需要用到狄克斯特拉算法找到两节点之间的最短路径了。

 

一、问题

      找出加权图中起点到终点的耗时最短的路径。

 

二、算法思路

1、找出从“起点”能前往的最“便宜”的邻节点;

2、算出邻节点的总开销;

3、将该开销更新到开销表;

4、重复前面三步,直到每一个节点都这样做了;

5、计算最终路径。

      算法需要一个用于储存所有节点的邻节点以及到邻节点的花费的表,一个储存从起点到节点的总开销的开销表,一个储存父节点的表,这三个表都可以用散列表实现。

 

三、解题思路

1、准备:

(1)创建一个有每个节点以及其邻节点和该邻节点边上权重的散列表;

(2)创建一个从起点到各节点的最低开销表,该开销表会慢慢更新;

(3)创建储存父节点的表,当一个节点的最低开销发生变化,更新父节点。

 2、算法思路:

(1)从开销表找出最便宜的节点;

(2)计算该节点的邻节点的总开销,即从起点到邻节点的总花费,

(3)用邻节点的总开销与开销表的比较。如果存在比原来便宜的节点,在开销表和父节点表更新它;如果存在每出现过的节点,在开销表和父节点表加上;

(4)标记该节点为已处理;

(5)重复前面4步,直到每一个节点都处理过。

3、代码示例:

 

posted on 2018-07-02 20:11  lqxing  阅读(104)  评论(0编辑  收藏  举报

导航