当存在多个最优解时,如何用匈牙利算法解决分配问题

问题描述

我正在尝试用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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...