二分圖匹配(匈牙利演算法)
阿新 • • 發佈:2019-02-18
#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; }