用于最小化连接具有共享边界的区域的图论算法

时间:2012-02-23 15:21:17

标签: c++ algorithm dynamic graph

我有一个多个"动物笔的加权图表"每支笔具有至少3个边缘/点和至少两个笔。我必须弄清楚要移除的最小加权边缘以便连接所有笔(您可以通过移除未连接到其他笔的外边缘来连接它们)。

有人可以推荐一种算法或过程,我可以用它来寻找要移除的最小加权墙。我在考虑Prim的算法,但我甚至不确定如何应用它。

这是http://cemc.math.uwaterloo.ca/contests/computing/2010/stage1/seniorEn.pdf

上的问题S4

我不希望答案只是朝着如何接近它的方向发展

1 个答案:

答案 0 :(得分:5)

你的方向正确。

将您的问题建模为无向图G=(V,E),其中V = { all pens }E = { (u,v) | there is a wall between u and v }w((u,v)) = cost of wall between u and v

为了“连接所有笔” - 您实际上正在寻找子图:G'=(V,E'),以便子图G'将被连接[每两个节点之间有一条路径],并且E'的墙壁成本极低。

以最低成本获得此优惠 - 您正在寻找Minimum Spanning Tree。 [很容易看出你确实需要一棵树 - 因为在创建树之后任何额外的边缘是多余的并且可以在不损害图形连接的情况下移除 - 或者在问题术语中 - 你可以恢复一面墙并且笔将会保持联系]

两种可能使您获得MST的算法是PrimKruskal