二分图匹配匈牙利算法(邻接表矩阵实现 - 好孩子's Blog
Hopcroft-Carp的算法
hdu2389Rain on your Parade

二分图匹配匈牙利算法(邻接表矩阵实现

好孩子 posted @ 2011年9月12日 07:37 in 匹配问题 , 929 阅读

#include <iostream>
#include <cstdio>
using namespace std;
int const MAXN = 250;
int graph[MAXN][MAXN], cnt[MAXN];
//邻接表矩阵,点度
bool ck[MAXN];//记录是否被访问
int match[MAXN];//匹配数组,记录右端到左端的匹配
int V, E;//点数、边数
bool search(int G[][MAXN], int k)
{//找增广边
    for(int i = 0; i < cnt[k]; i++)
    {
        int p = G[k][i];
        if(ck[p])
        {
            ck[p] = false;
            int t = match[p];
            if(t == -1 || search(G, t) )
            {
                match[p] = k;
                return true;
            }
            //match[p] = t;
        }
    }
    return false;
}

int hungary(int G[][MAXN], int left)
{//传入矩阵和左端点数,传出匹配的对数
    int answer(0);
    int i, j;
    for(i = 0; i < V; i++)        // V为右端顶点数
    {
        match[i] = -1;
    }
    for(i = 0; i < left; i++)
    {
       for(j = 0; j < V; j++)
       {
            ck[j] = true;
        }
       if(search(G, i))
       {
            ++answer;
       }
    }
    return answer;
}

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter