![42cd3d328377d2c8b3724f7eb3b98407.png](https://i-blog.csdnimg.cn/blog_migrate/a7747f16115e04b1163075b8fd4de9c2.jpeg)
#文章首发于公众号“如风起”。
原文链接:
最小树——Dijkstra算法及Python实现mp.weixin.qq.com![d1f453bcf6c7b71dfaf2f56965d017d9.png](https://i-blog.csdnimg.cn/blog_migrate/64c66131644641bc8c401963feb28a21.png)
最小树问题是一类非常简单的网络最优化问题,它在许多网络设计问题中有着广泛的应用。
常用的求最小树的算法有:破圈法、避圈法、边割法和Dijkstra算法等等。其中,破圈法、避圈法和边割法简单明了,便于在图上操作,但是破圈法和避圈法都需要判断圈,而边割法又要求构造边割,这在计算机中处理起来有些不便,而Dijkstra算法是一种易于在计算机上实现的有效算法。
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,是由荷兰计算机科学家艾兹赫尔·戴克斯特拉在1956年发现的算法,并于3年后在期刊上发表。戴克斯特拉算法使用类似广度优先搜索的方法解决赋权图的单源最短路径问题。
![dcf981ff5e28168d3441d79cea7a0052.png](https://i-blog.csdnimg.cn/blog_migrate/01e61290e97ba9e34616b8e794cef0c8.png)
Dijkstra算法是边割法的一种特殊形式,它与边割法不同之处在于给G的顶点(除顶点外)都赋上了一个标号。
Dijkstra算法可以通过权矩阵上的计算来实现。给定一个n阶简单的赋权图G,它的权函数