匈牙利演算法,KM演算法

2021-09-02 05:19:16 字數 1218 閱讀 4090

bool find(int x)

} }return false;

}///主程式

for (i=1;i<=n;i++)

///#include///#include///#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define mt(a,b) memset(a,b,sizeof(a));

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

const double pai=acos(-1.0);

const double e=2.718281828459;

const long long mod=1e9+7;

const int maxn = 305;

const int inf = 0x3f3f3f3f;

int love[maxn][maxn]; // 記錄每個妹子和每個男生的好感度

int ex_girl[maxn]; // 每個妹子的期望值

int ex_boy[maxn]; // 每個男生的期望值

bool vis_girl[maxn]; // 記錄每一輪匹配匹配過的女生

bool vis_boy[maxn]; // 記錄每一輪匹配匹配過的男生

int match[maxn]; // 記錄每個男生匹配到的妹子 如果沒有則為-1

int slack[maxn]; // 記錄每個漢子如果能被妹子傾心最少還需要多少期望值

int n;

bool dfs(int girl)

}else

}return false;

}int km()

}for (int i = 0; i < n; ++i)}}

int res = 0;

for (int i = 0; i < n; ++i)

res += love[ match[i] ][i];

return res;

}int main()

return 0;

}

匈牙利演算法 KM演算法

匈牙利演算法 求最大匹配,那麼我們希望每乙個在左邊的點都盡量找到右邊的乙個點和它匹配。我們依次列舉左邊的點x的所有出邊指向的點y,若y之前沒有被匹配,那麼 x,y 就是一對合法的匹配,我們將匹配數加一,否則我們試圖給原來匹配y的x 重新找乙個匹配,如果x 匹配成功,那麼 x,y 就可以新增為一對合法...

2019 7 22 匈牙利演算法,KM演算法

這幾天知識點量太大,一時間不易吸收。先占個坑,慢慢填 分享一位博主dark scope的思路,簡單易懂還有趣,雖然是初學,也馬馬虎虎懂了個大概 define maxn 100000 int n,m n個男生 m個女生 二分圖 男生在左女生在右 bool line maxn maxn 兩者之間相互喜歡...

傳統演算法 匈牙利演算法 KM演算法

做為乙個演算法工程師,除了了解各種nn網路結構,調的一手好引數,傳統演算法這一部分也不能拉下。因此著手寫這個系列,一方面加深自己對演算法的理解,另一方面 在實際業務中的應用,畢竟ac不是目的,融匯貫通的應用才是真目標。問題 剛入職某網約車平台的l同學被安排了個任務,如下圖所示,在一塊區域有m個司機和...