匈牙利算法:确定覆盖所有零的最小行数

问题描述

我正在尝试实施匈牙利算法。检查维基百科步骤:https://en.wikipedia.org/wiki/Hungarian_algorithm#Matrix_interpretation

考虑以下输入 (10 x 10):

x x 0 x 0 x 0 x x x
x x 0 x x x x x x x
0 0 x x x x x 0 x x
x x x x x 0 x x x x
x x x x x 0 x x x x
x x x 0 0 x x x x x
0 x x x x x x x x x
x x x x x x x x 0 0
x x x x x x x x x 0
x x x x x x x x 0 x

它需要 8 行来覆盖所有零(从 0 开始索引的行和列):R0 R1 R2 R5 C0 C5 C8 C9。

但是,请按照维基百科中给出的步骤操作:

  1. 将零标记为“已分配”或“划掉”。赋值:(0,2),划掉:(0,4) (0,6) (1,2);赋值:(2,0),划掉:(2,1) (2,7) (6,0);分配:(3,5),划掉:(4,5);分配:(5,3),划掉:(5,4);分配:(7,8),划掉:(7,9) (9,8);分配:(8,9)。
  2. 标记所有没有赋值的行:R1 R4 R6 R9;在新标记的行中标记所有具有零的列:C2 C5 C0 C8;在新标记的列中标记所有有分配的行:R0 R3 R2 R7。
  3. 重复2中的最后两步,直到没有行或列可以被标记:在新标记的行中标记所有具有零的列:R0->C4 C6,R3->none,R2->C1 C7,R7->C9 ;在新标记的列中标记所有具有赋值的行:C4 C6 C1 C7->none,C9->R8。

现在除 R5 之外的所有行都已标记;除 C3 之外的所有列都已标记。覆盖所有零所需的行数为 9 垂直 + 1 水平 = 10,这是不正确的。

谁能告诉我哪里出错了?还是求最小线的算法本身不完善?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)