朱 - 刘算法

· 定义

  对于有向无环图G (V, E),类似最小生成树的定义,有向图最小树形图即在有向图上查找总权值和最小的树形图(即有向边的树)。

· 朱 - 刘算法

  对于每个点先选取到达它的最小的边,这样可组成一个边集E1,显然,该边集权值和最小,但不一定是树。

  在该边集上进行缩点,并判断是否有解(是否有点无入度),在融会G中,记为G1

  当然,若此时没有找到有向环且有解,说明在当前图上已找到最小树形图,那么将原来的缩点解开,即除了当前树形图上的弧之外,将缩点内没有与已知弧有相同终点的边选出,如此构成了G的最小树形图。

  反之,则进行改边:先省去缩点内边;对于由缩点内出去的边,保持原权值即可;对于进入缩点的边,令Vs表示缩点点集,对于v ∈ Vs,u ∉ Vs,有<u, V> = <u, v> - v的最小入权边,是因为这样将权值相加的话,就相当于删去了缩点中拥有相同终点的边。

  这样更改完点集与边集,进行重复运算即可。

  其中,复杂度O (nm)。

· 代码

  (改代码仅求最小权值总和,这样是不需解开缩点的)

  

猜你喜欢

转载自www.cnblogs.com/Colythme/p/9710789.html