Haskell Prim的算法

时间:2011-12-12 03:06:16

标签: haskell prims-algorithm

有没有人知道如何更改prim的算法,以便处理未连接的图形?我知道我必须使用森林,但我不知道如何在Haskell中实现它。

3 个答案:

答案 0 :(得分:1)

`这就是我得到的

prim for            = prim' [n] ns [[]]
    where (n:ns)    = nodes for
        es          = edges for
        prim' t [] mst        = mst
        prim' t (r:rs) (x:xs) = let m = minimum[(c,u',v'| u <-t, v <- (r:rs), (u,v,c) <- es]
                    m | m == Nothing    = prim' (r:t) rs ([]:mst)
                      | otherwise       = prim' (v:t) (delete v' r) ((m:x):xs)

答案 1 :(得分:0)

Prim的算法找到MST,但如果图形未连接,则不存在MST。如果树是| V |,您可以检查树是否是生成树 - 它有1个元素。

答案 2 :(得分:0)

很容易找到图表的连接部分。分别为每个连接的子图运行Prim的算法。