Вы находитесь в правильном направлении.
Смоделируйте вашу проблему как неориентированный граф 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'
[Существует путь между каждыми двумя узлами], и стоимость стен в Е 'минимальны.
Чтобы получить это при минимальных затратах - вы ищете Минимальное связующее дерево . [Легко видеть, что вам действительно нужно дерево - потому что любое дополнительное ребро после создания дерева является избыточным и может быть удалено без ущерба для связности графа - или, в терминах задачи - вы можете восстановить одну стену, и ручки будут оставайтесь на связи]
Два возможных алгоритма, которые помогут вам получить MST: Prim и Kruskal