Dijkstra算法详细(单源最短路径算法)
介绍 对于 dijkstra 算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解 bfs和dfs ,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或许,你曾经感觉它很难,那么,这个时候正适合你重新认识它。 Dijkstra能是干啥的? Dijkstra是用来求单源最短路径的 就拿上图来说,假如直到的路径和长度已知,那么可以使用 dijkstra 算法计算 南京到图中所有节点的最短距离。 单源 什么意思? 从一个顶点出发,Dijkstra算法只能求一个顶点到其他点的最短距离而不能任意两点。 和 bfs 求的最短路径有什么区别? bfs 求的与其说是路径,不如说是 次数 。因为bfs他是按照队列一次一次进行加入相邻的点,而两点之间没有权值或者权值相等(代价相同)。处理的更多是偏向迷宫类的这种都是只能走邻居(不排除特例)。 Dijkstra在处理具体实例的应用还是很多的,因为具体的问题其实带权更多一些。 比如一个城市有多个乡镇,乡镇可能有道路,也可能没有,整个乡镇联通,如果想计算每个乡镇到a镇的最短路径,那么Dijkstra就派上了用场。 算法分析 对于一个算法,首先要理解它的 运行流程 。 对于一个Dijkstra算法而言,前提是它的前提条件和环境: 一个连通图,若干节点,节点可能有数值,但是 路径 一定有 权值 。并且路径