解决分配问题的匈牙利算法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实现】
文章图片
这一块建立数组用的Integer,因为后面用的话方便一点。
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 热闹中的孤独
- parallels|parallels desktop 解决网络初始化失败问题
- 进必趋|进必趋 退必迟,问起对 视勿移
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- jhipster|jhipster 升级无效问题
- 如何寻找情感问答App的分析切入点
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- “精神病患者”的角度问题
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题