迪杰斯特拉(Dijkstra)算法

 迪杰斯特拉算法是单源点最短路径算法之一。本文力图能够不用任何图示和程序说清楚迪杰斯特拉算法,来帮助大家理解这个算法。

首先说说什么叫单源点最短路径问题。顾名思义首先得有个源点,说白了就是出发点。单源点最短路径问题就是求从一个点出发到图中所有点的最短路径。通俗地说就是从一个地方出发到所有地方的最短的距离。例如从北京到上海、广州、深圳、长春、沈阳、天津怎么走最近。显然从北京到长春可以这么走:北京-沈阳-长春。

 

那么怎么能求出一个点到所有点的最短路径呢。那么这些方法中有一种是迪杰斯特拉发明的就叫做迪杰斯特拉算法。他是这样想的:从一点出发先算出到所有点的直达距离。然后找一个最近的作为中转站,再求出在准许走中转站的情况下源点到其他所有点的距离,如果比原来小了就记录下来。然后重复刚才的步骤再添加一个中转站。举个例子:假如你要从北京去德惠,德惠市是长春周边的一个小城市。北京没有直达的火车。那怎么办呢你可以先坐火车去长春再做汽车去德惠。可惜正赶上春运啊,北京直达长春的车没有了。那咋办呢,可以先坐火车去沈阳,沈阳倒车去长春,长春坐汽车去德惠。其实这样的例子在生活中我们总会遇到,说白了这就是迪杰斯特拉算法。通过添加中转站来找到最短路径。在上例中北京到长春和德惠的距离一开始都是无穷大,就是不能直达。但是可以直达沈阳。当把沈阳当做中转站后到达长春就成为了可能不过还是到不了德惠。添加长春为中转站后就可以到德惠了。

 

上面说的不知道大家能明白吗,有人可能说怎么没提距离呢,恩,能到就是1不能就是无穷大,实际和权值是具体数值一样。置于程序怎么写和数学原理我想网上有很多了,不过算法的关键再与理解。

点赞