最小生成树手动模拟

来源:互联网 发布:unity3d中文版下载 编辑:程序博客网 时间:2024/06/06 07:31

        方便以后查阅,现在把考研中关于图的应用这章的几个算法,手动模拟出来,图的主要应用包括,最小生成树,最短路径,拓补排序和关键路径。

1.最小生成树

        - 最小生成树并不是唯一的,各边权值互不相等时,最小生成树唯一,若无向连通图的边比顶点数少1,即G本身就是一棵树时,G的最小生成树就是它本身。
        - 最小生成树的边的权值之和总是唯一的。
        - 最小生成树的边数十顶点数减1。
prim算法和Kruskal算法,都是基于贪心算法的策略。

1.1Prim算法

        用来求加权连通图的最小生成树的算法,执行和最短路径的Dijkstra算法很相似。
对于图G而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边。 从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点)的边中选取权值最小的边(u, v),将顶点v加入集合U中,将边(u, v)加入集合T中,如此不断重复,直到U=V为止,最小生成树构造完毕,这时集合T中包含了最小生成树中的所有边。

具体模拟过程如下图,以下图G为例手动模拟过程。









此时,最小生成树完成,顶点依次是A,B,F,E,D,C,G。

1.2Kruskal算法

        按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路。此算法适合边稀疏而顶点较多的图。
        具体模拟过程如下图,还是以图G为例手动模拟过程。








此时,最小生成树完成,边依次是< E,F >,< C,D >,< E,D >,< B,F >,< A,B >,< A,G >,< A,G >.