• 匈牙利算法


    class Hungary {
    #define Hungary_MAX_Node 105
    #define Hungary_MAX_Edge 10005
    public:
        struct EDGE {
            int v;
            int next;
        } edge[Hungary_MAX_Edge];
        int head[Hungary_MAX_Node];
        int Left[Hungary_MAX_Node];
        bool vis[Hungary_MAX_Node];
        int N, M;
        Hungary() {
            clear();
        }
        void clear() {
            N = M = 0;
            memset(Left, 0, sizeof(Left));
            memset(head, -1, sizeof(head));
        }
        void addEdge(int a, int b) {
            edge[M].v = b;
            edge[M].next = head[a];
            head[a] = M++;
        }
        bool dfs(int u) {
            for (int e = head[u]; e != -1; e = edge[e].next) {
                int v = edge[e].v;
                if (!vis[v]) {
                    vis[v] = true;
                    if (!Left[v] || dfs(Left[v])) {
                        Left[v] = u;
                        return true;
                    }
                }
            }
            return false;
        }
        int Max_Match() {
            int ret = 0;
            for (int i = 1; i <= N; i++) {
                memset(vis, 0, sizeof(vis));
                if (dfs(i)) {
                    ret++;
                }
            }
            return ret;
        }
    };
    View Code

    N:点的数量
    M:边的数量
    void clear():清空数据结构
    void addEdge(int a, int b):添加一条a指向b的匹配
    int Max_Match():最大匹配

  • 相关阅读:
    表格边框的合并
    solr服务搭建
    JedisClient操作redis 单机版和集群版
    redis集群的搭建
    FastDfs的搭建
    打开与关闭端口
    zookeper分布式搭建1
    zookeper分布式搭建
    Zookeeper的安装
    Linux下Jdk的安装
  • 原文地址:https://www.cnblogs.com/dramstadt/p/6266509.html
Copyright © 2020-2023  润新知