用Dijkstra算法解决某点到其他顶点最短距离的问题

题目

求顶点A到其他个顶点的最短路径,写出各步骤状态
用Dijkstra算法解决某点到其他顶点最短距离的问题_第1张图片

解题步骤

先设置一个集合 [ B , C , D , E , F , G ] [B,C,D,E,F,G] [B,C,D,E,F,G]
我们要做的就是把数据填上去,上面这个集合最后要写的就是A点到以上这些点的最短距离。

第一步

当前在A点,可以找到的距离如下:
[ 15 , 2 , 12 , ? , ? , ? ] [15,2,12,?,?,?] [15,2,12,?,?,?]
你看,A点连着的点只有三个,B,C,D,我们先把这些已知的距离写上。

我们确定了C点的数据

第二步

从上面的集合看,最短的地方是C点,好,那我们跳到C点。
当前在C点,我们假如发现了更短的路径则覆盖掉原来的数据。

我们不难发现,从C点 → \rightarrow F点 → \rightarrow D点比直接从A点 → \rightarrow D点要快,所以,我们把D处的数据12换成(2+4+5=11)。

另外,此时,在C点,可以到达E,F点

依次类推有集合如下:
[ 15 , 2 , 11 , 10 , 6 , ? ] [15,2,11,10,6,?] [15,2,11,10,6,?]

此时,除了C点外,最短的就是A → \rightarrow F了,所以,接下来是以F为起步

至此,我们确定了B,C,D,F点的数据

第三步

我们发现A → \rightarrow F → \rightarrow G是6+10=16,但是,A → \rightarrow F → \rightarrow D → \rightarrow G是6+5+3=14,因此我们更倾向于后者。

在F处没有发现比从C出发更快的路径,因此,此时集合:
[ 15 , 2 , 11 , 10 , 6 , 14 ] [15,2,11,10,6,14] [15,2,11,10,6,14]

至此,全部点已经确定了

总结

主要是贪心算法的思想,我们着眼于,我们走到最近的点,到达目标一直都选择更近的路径。

你可能感兴趣的:(个人杂记)