匈牙利算法 - 选择0的最后一步,使每行和每列只选择一个

时间:2013-03-03 20:46:47

标签: java algorithm hungarian-algorithm

我正在尝试用Java实现匈牙利语算法。我有一个NxN成本矩阵。我正在逐步关注this指南,并已达到第9步 -

  

“通过选择一组零来选择匹配,以便每行或   列只有一个选中。“

我已经有了0的矩阵。 我试图解决这个问题,唯一对我有用的是蛮力方法。

我还想过选择我遇到的第一个0,删除那个列&划线和重复;但这种方法不起作用。

有诀窍或方法吗?什么东西不是太复杂?任何建议都会受到赞赏。

由于

1 个答案:

答案 0 :(得分:3)

匈牙利人的答案::)

  • 计算每行和每列的0元素数。 (称之为row[]column[]
  • 选择行和列的最小值。例如,让它为column[3](如果在row中找到最小值,则同样适用,仅交换行和列)如果您有多个具有相同值的值,请选择任何。 / LI>
  • 选择该列中的0元素,将其标记。如果您有多个,请选择任意。
  • column[3]设为0(下次不选择)
  • 迭代column[3]中的所有元素,如果找到0元素,则将相应的row[i]值减少1
  • 如果您在行或列中都找不到正值,则表示您已完成。