二分圖(Java)
//對於節點數目不同可以處理,
//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;
}
}
相關文章
- 二分圖匹配
- 二分圖最小點覆蓋等於二分圖最大匹配
- 二分圖(例題)
- 二分圖補充
- 『筆記』二分圖筆記
- 拆點判定二分圖
- Java二分法Java
- 關押罪犯(二分答案+染色法判二分圖)
- 圖論-二分圖匹配匈牙利演算法圖論演算法
- 圖解--二分查詢樹圖解
- POJ - 3041 Asteroids 【二分圖匹配】AST
- 二分圖最大權完美匹配
- 匈牙利演算法模板(二分圖)演算法
- UVA 11080 - Place the Guards(二分圖判定)
- [Python手撕]判斷二分圖Python
- 【UOJ78】二分圖最大匹配
- 【Java】陣列二分查詢元素Java陣列
- 一些“二分圖染色”板題
- 二分圖最大匹配(匈牙利演算法)演算法
- 網路流&費用流&二分圖
- 2.27 二分圖與網路流複習
- (最大流,二分圖的多重匹配) Magic Potion
- 匈牙利演算法--二分圖的最大匹配演算法
- 雜題選講 #1:二分圖邊著色
- Java實現二分查詢演算法Java演算法
- cf19E. Fairy(奇環 二分圖染色)AI
- 詳解匈牙利演算法與二分圖匹配演算法
- (演算法競賽)簡單易懂二分圖演算法
- 關押罪犯 擴充套件域並查集 帶權並查集 二分圖+二分套件並查集
- Java中關於二分查詢的問題Java
- 《啊哈!演算法》我要做月老 ——二分圖最大匹配演算法
- 二分圖的最大匹配(匈牙利演算法)程式碼演算法
- BZOJ-1305 dance跳舞 建圖+最大流+二分判定
- 東哥帶你刷圖論第四期:二分圖的判定圖論
- wqs二分(帶權二分)
- NOIP2024集訓Day47 生成樹+二分圖
- 二分
- java腦圖Java
- 二分查詢 : 那個隱藏了 10 年的 Java BugJava