QingYi. 发表于 2021-1-9 17:34

【笔记】数据结构与算法之匈牙利算法


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    static int N = 510;
    static int M = 100010;
    static int n1,n2,m,idx;
    static int [] h = new int;
    static int [] ne = new int;
    static int [] e = new int;
    //匹配的数值
    static int [] match = new int;
    //状态statue
    static boolean [] st = new boolean;

    public static void main(String[] args) throws IOException {
      BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
      String[] s = bf.readLine().split(" ");
      n1 = Integer.parseInt(s);
      n2 = Integer.parseInt(s);
      m = Integer.parseInt(s);
      Arrays.fill(h,-1);
      while (m-- > 0){
            String[] res = bf.readLine().split(" ");
            int a = Integer.parseInt(res);
            int b = Integer.parseInt(res);
            add(a,b);
      }
      int res = 0;

      for(int i = 1;i<=n1;i++){
            //find函数会改变,每次都要置为false
            Arrays.fill(st,false);
            if (find(i)){
                res++;
            }
      }
      System.out.println(res);
    }

    private static boolean find(int x) {
      for(int i = h;i!=-1;i = ne){
            int j = e ;

            if (!st){
                //没访问过就设置访问过
                st = true;
                //没有匹配或者当前这个点的上一级没有匹配过
                if (match==0 || find(match)){
                  match = x;
                  return true;
                }
            }
      }
      return false;
    }

    private static void add(int a, int b) {
      e =b;
      ne = h;
      h = idx++;

    }
}

在新标签打开所有链接复制所有链接URL复制所有链接URL(反向)复制所有链接标题 + URL复制所有链接标题 + URL (MD)复制所有链接标题 + URL (BBS)复制所有链接标题 + URL (筛选)复制所有链接标题 + URL (设置复制格式)在新标签页打开所有图片链接在一个标签页显示所有图片链接
复选框 - 选中
复选框 - 取消
复选框 - 反选
单选框 - 选中
单选框 - 取消
特殊单选框 - 选中

dongse 发表于 2021-1-9 18:08

页: [1]
查看完整版本: 【笔记】数据结构与算法之匈牙利算法