最短路径
生活中,我们常常会面临着对路径的最优选择问题,可能是路程最短,也可能是时间最短,这个的最短路径就类似路程最短的选择。
比如在上海,乘地铁去某个地方,上海的地铁路线很多,从地图上看上去就是一个网。去某个地方就会有多条路线的选择,我们一般就会选最短那条路线。当然,在现实生活中,还会考虑时间、换乘等因素,这里只是举个例子说什么是最短路径。
地铁换乘貌似一眼就可以看出来那条路线是最优的路线。但是在一些复杂的情况下,人眼就很难确定最优路线来,比如送外卖、自驾车等。人眼就很难做出最优选择,因为路况等因素,根本没法判断。这时就需要用算法来选择最佳路线了。这也是这篇文章的主角:迪杰斯特拉(Dijkstra)算法。
迪杰斯特拉算法
迪杰斯特拉(Dijkstra,又译戴克斯特拉)算法由荷兰计算机科学家艾兹赫尔·迪杰斯特拉在1956年提出。使用了广度优先搜索解决带权有向图的单源最短路径问题。通过一个顶点作为源节点然后找到该顶点到图中所有其它节点的最短路径,产生一个最短路径树。
迪杰斯特拉算法步骤
1.标记所选的初始顶点,当前距离为 0,其余顶点设为无穷大。
2.将具有最小当前距离的非访问顶点设置为当前顶点 C。
3.对于当前顶点 C 的每个邻居顶点 N:将当前距离 C 与连接 C—N 的边缘的权重相加。 如果它小于顶点 N 的当前距离,则将其设置为 N 的新当前距离。
4.将当前顶