求图的最短路问题,几乎是图论的必学内容,而且在算法分析与设计中也会涉及。很多书上内容,
实在没法看,我们的图论教材,更是编的非常糟糕,吐槽,为啥要用自己学校编的破教材,不过据说
下一届终于要换书了。
言归正传,开始说明最短路问题。
对一幅图G,我们对每一条边赋权w(e),成为一个赋权图。H是G的一个子图,则W(H) = sigma(w(e)),
也就是对每条边的权求和。寻找从一个点a到另一个b的一个子图,使得权和最小,即为最短路问题。
我表示看到后,是懵逼的,接下来详细分析下。
其实就是不断求一个点集合中的每个点,和与他相邻点最短路的最小值。我们还是从实例出发,更
容易讲解。我会把上述步骤,拆解为多步。
我们求下面这个图从A到L的最短路。
关于算法的实现可以在参考资料中找到。
同样在一个连通赋权图中,寻找一颗生成树使得权和最小。
此算法比较简单,很容易理解。
Kruskal算法:
不断寻找最小权的边即可。
比如,寻找下图的最小生成树。
结果如下
1.http://www.javashuo.com/article/p-rncmlogy-kt.html
2.https://www.cnblogs.com/hxsyl/p/3270401.html