我需要按距离将蓝色物体映射到红色物体。每个对象的中心是已知的。黄色和绿色对象(如果显示)是提示。它们有助于确定哪个红色物体更重要。
例如,在下图所示的情况下:
- 底部的蓝色对象应该映射到最右下方的红色对象,因为绿色和黄色对象都非常靠近那个红色对象。
- 右边的蓝色对象应该映射到右上角的红色对象,因为它更靠近它。
我有一个天真的解决方案,但我不太确定该怎么做而不是“????” 以下
你有什么建议吗?
我在某种伪代码中的天真解决方案:
for each BLUE:
find group P=(YELLOW_BLUE, GREEN_BLUE and RED_BLUE) when each object in P is the closest to BLUE
vector<RED> redCandidates
for each O in P:
if O is YELLOW OR O is GREEN
find closest RED to O
insert RED to redCandidates
if size of redCandidates is 0 -> return RED_BLUE
else if size of redCandidates is 1 -> return redCandidates[0] since hint has more weight to the decision
else if size of redCandidates is > 1 -> ????
UPDATE1
在研究了@ldog 建议的最小成本流问题后,我决定使用Hungarian Algorithm。我创建了二分图,其中每个蓝色节点都连接到每个红色节点,边上的权重是蓝色和红色之间的距离。
现在,在我解决图表之前,我需要在黄色/绿色接近红色的边缘上应用奖励。我不太明白该怎么做。
假设蓝色 1 和红色 4 之间的距离是 D_1_4 = 10,黄色提示 11 和红色 4 之间的距离是 D_4_11 = 3。那么,因为 D_1_4 > D_4_11,我应该只在边 1_4 上添加奖励吗?或者,我应该将奖励添加到进入节点 4 的每条边,即边 1_4、2_4 和 3_4?