匈牙利算法主要用来求解指派问题。
过程如下:
每一行减去改行最小值,然后看看哪一列上面还没有0,没有的那一列上再减去最小值,然后就找所有不在同一行也不在同一列的0,找到了便找到了最优解,找不到则说明系数矩阵比较特殊,需要做一定的变换 。变换方法如下:
从变换后的矩阵中只能选出四个位于不同行不同列的零元素,但 5 = n ,
最优指派还无法看出。此时等价变换还可进行下去。步骤如下:
(1) 对未选出0元素的行打∨;
(2) 对∨行中0元素所在列打∨;
(3) 对∨列中选中的0元素所在行打∨;
重复(2)、(3)直到无法再打∨为止。
可以证明,若用直线划没有打∨的行与打∨的列,就得到了能够覆盖住矩阵中所
有零元素的最少条数的直线集合,找出未覆盖的元素中的最小者,令∨行元素减去此
数,∨列元素加上此数,则原先选中的0元素不变,而未覆盖元素中至少有一个已转
变为0,且新矩阵的指派问题与原问题也等价。上述过程可反复采用,直到能选取出足
够的0元素为止