生成树

作者: Joseph_Z | 来源:发表于2017-06-27 13:57 被阅读0次

    次小生成树

         可以用Prim算法先把i点到j点的最大边权值和最小生成树的权值求出来,再对最小生成树加边cost[i][j],这样成了一个环,然后把i到j的最大边减掉,这样得到的树的权值除最小生成树以外最小,即cMst = min(cMst,(Mst+cost[i][j]-Ma[i][j]));

        也可用Kruskal算法先计算一遍最小生成树并把其上的边标记,然后枚举每条被标记的边,去掉这条边再求一次Kruskal,然后恢复,求min值,就可得到次小生成树的权值。

    最小树形图:

    该算法主要拿来解决最小有向生成树

        最小有向生成树:给定一个有向带权图G和其中一个点u,找出一个以u为跟结点,权和最小的有向生成树。有向生成树也叫树形图,是指一个类似树的有向图,满足以下条件:

    1.恰好有一个入度为0的点,称为根结点

    2.其他结点的入度均为1

    3.可以从根结点到达其他结点

        算法的过程如下:

    1.找到除了root以为其他点的权值最小的入边。用In[i]记录

    2.如果出现除了root以外存在其他孤立的点,则不存在最小树形图。

    3.找到图中所有的环,并对环进行缩点,重新编号。

    4.更新其他点到环上的点的距离

    5.重复3,4直到没有环为止。

    最小生成树计数

        先建立矩阵Matrix-tree定理:

    该矩阵的行列式的值det即为这个图最小生成树的个数。

    相关文章

      网友评论

          本文标题:生成树

          本文链接:https://www.haomeiwen.com/subject/cufecxtx.html