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