二分图(Java)
来源:互联网 发布:mac air app 编辑:程序博客网 时间:2024/06/05 23:39
//对于节点数目不同可以处理,//Java语言实现,最基础未优化public class ErFenTu {public static int m = 50;public static int n = 100;public static int[] lx = new int[m];public static int[] ly = new int[n];public static boolean[] sx = new boolean[m];public static boolean[] sy = new boolean[n];public static int[] cx = new int[n];//x对应y的坐标public static int[] match = new int[n];//大小为n(y对应x的坐标)public static int[][] weight; public static boolean path(int u){//范围到m sx[u] = true; for(int v = 0; v < n; v++){ if(!sy[v] && lx[u] + ly[v] == weight[u][v]){ sy[v] = true; if(match[v] == -1 || path(match[v])){ cx[u] = v; match[v] = u; return true; } } } return false; } public static int bestMatch(boolean maxsum){ if(!maxsum){ for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ weight[i][j] = - weight[i][j]; } } } for(int i = 0; i < m; i++){ lx[i] = Integer.MIN_VALUE; for(int j = 0; j < n; j++){ if(lx[i] < weight[i][j]){ lx[i] = weight[i][j]; } } } for(int i = 0; i < n; i++){ ly[i] = 0; match[i] = -1; } for(int u = 0; u < m; u++){ while(true){ for(int i = 0; i < m; i++){ sx[i] = false; } for(int i = 0; i < n; i++){ sy[i] = false; } if(path(u)){ break; } //修改标号 int dx = Integer.MAX_VALUE; for(int i = 0; i < m; i++){ if(sx[i]){ for(int j = 0; j < n; j++){ if(!sy[j]){ dx = Math.min(lx[i] + ly[j] - weight[i][j], dx); } } } } for(int i = 0; i < m; i++){ if(sx[i]){ lx[i] -= dx; } } for(int i = 0; i < n; i++){ if(sy[i]){ ly[i] += dx; } } } }// for(int i = 0; i < n; i++){// System.out.println(match[i]);// } int sum = 0; for(int i = 0; i < n; i++){ if(match[i] != -1){ sum += weight[match[i]][i]; } } if(!maxsum){ sum = -sum; for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ weight[i][j] = -weight[i][j]; } } } return sum; }}
0 0
- 二分图(Java)
- hdu1083 Java 二分图
- 二分排序(java)
- 二分查找(java)
- 二分查找算法(java)二分搜索
- 二分图趣写(二分图)
- 二分排序(java语言)
- 二分查找(java实现)
- 二分查找(Java语言)
- 二分查找(Java实现)
- 二分查找(Java实现)
- 二分搜索(JAVA & Python)
- 二分查找 (java实现)
- java实现二分图匹配匈牙利算法(HDU1083)
- zoj3460(二分图,拆点,二分)
- zoj3460(二分图,拆点,二分)
- HDU2063--过山车(二分匹配,二分图)
- poj2239(二分图)
- ionic简介
- junit学习笔记
- Android 框架之创建设备节点文件
- 设计模式学习(一)
- 老生常谈——分治法与归并排序
- 二分图(Java)
- 【POJ 3083】Children of the Candy Corn
- 对于linux下system()函数的深度理解(整理)
- Facebook前端框架React.js JSX语法基础
- 关于sd卡中storage/emulated/0找不到问题
- STL list
- Android Studio初接触
- 动态链接库和静态链接库的原理及区别
- Android Uri介绍