我发现最小生成树(MST)的某些边缘使用详细here的联合查找方法重叠,并使用float
代替integer
权重进行修改,使用{{1值而不是integer
ID。下图中的灰线是MST边缘,绿色/蓝色边缘是形状边界。
边缘成本是节点之间的欧氏距离。
代替节点87 - > 138(重量= 17.7)和55 - > 134(重量= 9.49),如果不是55 - > 138和87 - > 134?实现是错误的还是算法本身会发生这种情况?
除了顶点数之外,请忽略括号中的数字(它们是连接到每个节点的边的组合权重)。
相同示例,缩小以显示其他边缘权重(删除顶点数字以消除杂乱):
P.S。我发现55 - >之间的距离138和87 - > 134完全相同(12.20656)。
答案 0 :(得分:1)
根据AakashM提出的问题回答我自己的问题。
具体而言,这是因为边缘成本在55 - >之间。 138和87 - > 134完全一样。这种情况发生在我的情况下,因为我使用图像生成一个形状,因此点之间的距离是量化的。
受此启发,我在边缘添加了非常小的随机权重(小于像素之间的最小距离)(编辑:没有)解决了这个问题!
因此,该算法仍然适用于欧几里德MST,我的具体实现包含一个警告。
答案 1 :(得分:0)
查看第二张图片(特别是靠近顶部的未连接岛屿),看起来您正在将边缘列表修剪为不跨越形状边界的那些。
这样,边缘55- 。 138和78< - > 138不可用于Kruskal算法,并且将顶点138连接到图的其余部分的唯一边连接到顶点87.