最小路径和树的那一节,最小生成树不同。
最小生成树,是图中连接了所有的顶点,所生成的边上的权值之和最小的生成的的树,是指所有路径相加起来和最小的树。它的权值,是在结点上的。
最小路径,讨论的是,如何确定指定的某个顶点,到其余任意一个顶点对应的的最短路径;以及,如何确定图中,任意两个顶点的最短路径。(这不是对图的打乱重组,只是在寻找现有的路径最小的那个)。
求某个顶点到其他各顶点的最短路径的Dijkstra(迪杰斯特拉)算法;求每一对顶点之间的最短路径的算法是,Floyed(弗洛伊德)算法。
Dijkstra(迪杰斯特拉)算法:
将图中顶点集合 V 分为两组,第一组是已求出的最短路径的顶点集合(用 S 表示),第二组为其余未确定最短路径的顶点集合(用 U 表示),按最短路径长度的递增次序依次把第二组放进 S 中。在加入过程中,始终保持从源点 V 到 S 中各顶点的最短路径长度不大于从源点 V 到 U 中任意顶点的最短路径长度。此外,各点对应一个距离,在 S 中顶点的距离就是从源点 V 到此顶点的最短路径长度。在 U 中的顶点的距离,是从源点 V 到此顶点的且只包括 S 中的顶点作为中间顶点的当前最短路径长度。
Floyd(弗洛伊德)算法:
对于从vi到vj的弧,进行n次试探:首先考虑路径vi,v0,vj是否存在,如果存在,则比较vi,vj和vi,v0,vj的路径长度,取较短者为从vi到vj的中间顶点的序号不大于0的最短路径。在路径上再增加一个顶点v1,依此类推,在经过n次比较后,最后求得的必是从顶点vi到顶点vj的最短路径。