Dijkstra算法的步骤

  • 格式:pdf
  • 大小:205.48 KB
  • 文档页数:1

Dijkstra算法(最短路)的具体步骤:

(1)开始时,令

,)(,,0,0,,0

0

jsjsssvTvvvpvsi令对每个.,sks

j

(2) 设 kv是刚获得P标号的点.考察每个使 )(,),(

jjijjkvTvsvAvv将的点且

修改为即



kjkjjwvPvTvT)(),(min)( (7.6)

如果 ,)()(

kjkjwvPvT则把T(vj)修改为 kjkwvP)(,把 j修改为 k;否则不修

改.

(3)令

)(min)(

jsvjvTvT

iji

. (7.7)

如果 T,则把 ijv的T标号变为P标号,即令 )()(

iijjvTvP,令 

ijiivSS

1,k=ji,把i换成i+1,如果1iSV

,算法终止,这时对每一个

1jivS

有

)()(

jjvPvl;而对每一个

1jivS

,有 

jjvTvl.否则返回(2);

“最邻近方法”是构造最小哈密顿环的一个较好的方法,具体步骤如下:

(1)有任意选择的结点开始,找一个与起始点最近的结点,形成一条边的

初始路径。

(2)设x表示最新加到这条路上的结点,从不在路上的所有结点中间选一

个与x最接近的结点,将连接x与这一结点的边加到这条路上。重复这一步,直

到图中所有结点包含在路上。

(3)将连接起始点与最后加入的结点之间的边加到这条路上,就得到一个

环。

求最小生成树的Kruskal算法,具体步骤如下:

设(,,)GVEf是一具有n个结点的连通有权图,

(1)选取G中一条边

1e,使

1e在G的所有边中有最小的权,

11(,)GVS,



11Se,1i;

(2)若已选好

12,,,

iiSeee,从

iES中选一条边

1ie

满足下列条件:

①

1iiSe

中不含有环;

②在

iES的满足①的所有边中,

1ie

有最小的权。

若满足上述条件的边

1ie

不存在,则(,)

iiGVS就是最小生成树。否则,令



11iiiSSe

,

11(,)

iiGVS

;

(3)令1ii,并返回第(2)步。