zoukankan      html  css  js  c++  java
  • hdu2063 二分图匹配,匈牙利算法

    #include <stdio.h>
    #include <string.h>
    int n1,n2,m,ans;
    int result[1001]; //记录V2中的点匹配的点的编号
    bool state [1001]; //记录V2中的每个点是否被搜索过
    bool data[1001][501];//邻接矩阵 true代表有边相连
    void init() {
        int t1,t2;
        memset(data,0,sizeof(data));
        memset(result,0,sizeof(result));
        ans = 0;
        scanf("%d%d",&n1,&n2);
        for (int i = 1; i <= m; i++) {
            scanf("%d%d",&t1,&t2);
            data[t1][t2] = true;
        }
        return;
    }
    bool find(int a) {
        for (int i = 1; i <= n2; i++) {
            if (data[a][i] == 1 && !state[i]) { //如果节点i与a相邻并且未被查找过
                state[i] = true; //标记i为已查找过
                if (result[i] == 0 //如果i未在前一个匹配M中
                || find(result[i])) { //i在匹配M中,但是从与i相邻的节点出发可以有增广路
                    result[i] = a; //记录查找成功记录
                    return true; //返回查找成功
                }
            }
        }
        return false;
    }
    int main() {
        while(~scanf("%d",&m)&&m){
        init();
        for (int i = 1; i <= n1; i++) {
            memset(state,0,sizeof(state)); //清空上次搜索时的标记
            if (find(i)) ans++; //从节点i尝试扩展
        }
        printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    小程序运行环境
    在虚拟机系统上安装oracle教程
    Java keywords
    Java bytecode instruction listings
    一个理解JVM的例子2
    一个理解JVM的例子
    JDK的环境变量设置
    JRE、JDK和JVM的关系
    合理的封装实例
    修改源码的几种取巧的方式
  • 原文地址:https://www.cnblogs.com/symons1992/p/3411329.html
Copyright © 2011-2022 走看看