解决分配问题的匈牙利算法java实现

算法规则:
Hungarian算法
java代码:

package Text; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class Hungarian1 { private Integer[][] originalValues; //存储原始的成本数组 private Integer[][] processValues; //用于变化的成本数组 List rowIndex=new ArrayList(); //存放没有-1的行下标 List colIndex=new ArrayList(); //存放没有-1的行中有-2的下标 private Map indexMap=new HashMap(); //用于存储最后的坐标 //构造函数用于刚开始将原始数据存储在originalValues,并存储在processValues中用于变化 //这块process存储需要用到clone函数 publicHungarian1(Integer[][] values) { //因为输出的为阶矩阵所以行和列一样 int len=values.length; originalValues=values; //原始数据,将orginalValues数组指向原来的数组 processValues=MyClone(values); //得到一个新的数组与原始数组没有地址关联 boolean flag=false; //表示最后indexMap中存储是行列,还是列行(true:列行) //1、对数组的每一行减去每行的最小值 for(int i=0; i en:indexMap.entrySet()) { System.out.println(en.getKey()+1+"--------"+(en.getValue()+1)); count+=originalValues[en.getKey()][en.getValue()]; } }System.out.println(); System.out.println(); for(int i=0; i
实现显示:
package Text; public class Text1 { public static void main(String[] args) { Integer[][] values = { {9,11,3,6,6}, {10,9,11,5,6}, {8,10,5,6,4}, {6,8,10,4,9}, {11,10,9,8,7} }; Hungarian1 hungarian1=new Hungarian1(values); }}

【解决分配问题的匈牙利算法java实现】解决分配问题的匈牙利算法java实现
文章图片

这一块建立数组用的Integer,因为后面用的话方便一点。

    推荐阅读