1. 程式人生 > >二分圖匹配(匈牙利演算法)

二分圖匹配(匈牙利演算法)

#include <iostream>
#include <string.h>

using namespace std;

const int maxn = 1001;

int girl[maxn];
int used[maxn];
int line[maxn][maxn];
int m;

// m是頂點的個數
// n是能夠配對的數目

bool find_(int x){
    for(int j = 1; j <= m; ++j){
        if(line[x][j] == true && used[j] == false){ // 當x能和j配對的時候,但是j又沒有訪問過,就可以用了
            used[j] = true;
            if(girl[j] == 0 || find_(girl[j])){
                girl[j] = x; // 這個配對是可以的
                return true;
            }
        }
    }
    return false;
}

void solve(){
    int total = 0;
    int n;
    cin >> n;
    for(int i = 0; i < m; ++i){
        int x, y;
        cin >> x >> y;
        line[x][y] = true;
    }
    for(int i = 1; i <= n; ++i){
        memset(used, 0, sizeof(used)); // 每次都是再次初始化
        if(find_(i)) total++; // 結果加一
    }
    cin >> total;
}

int main(){
    solve();
    return 0;
}