问题描述
我正在尝试用Java实现匈牙利算法。我能够为具有单个最佳解决方案的专家解决该问题。但是,当有多个最佳解决方案时,我会无所适从(按比例计算)。
以示例矩阵为例。
3 1 1 4
4 2 2 5
5 3 4 8
4 2 5 9
执行行和列缩减之后。矩阵看起来像。
0 0 0 0
0 0 0 0
0 0 1 2
0 0 3 4
现在显然有多种解决方案,例如
0 0 0 0*
0 0 0* 0
0 0* 1 2
0* 0 3 4
和
0 0 0* 0
0 0 0 0*
0* 0 1 2
0 0* 3 4
如何编程找到至少一种解决方案的方法?任意分配开头的0通常会迫使您陷入困境。例如如果在位置0,0处分配了0,则会发生以下情况。
0* 0- 0- 0-
0- 0- 0* 0-
0- 0* 1- 2-
0- 0- 3- 4-
那我该如何智能地选择最佳的解决方案位置?
解决方法
如果遇到“死胡同”,则需要寻找增广路径,就像未加权的最大匹配算法一样。参见例如these lecture notes。