1. 程式人生 > 其它 >hdu過山車——二分圖匹配之匈牙利演算法模板題

hdu過山車——二分圖匹配之匈牙利演算法模板題

題目連結

思路

二分圖匹配模板題

AC程式碼

#include<bits/stdc++.h>

using  namespace std;
const int N = 520;
int g[N][N],used[N];//鄰接矩陣存圖,g[u][v]=1說明u到v有一條路
int k,m,n;//分別表示可能的組合數目,女生的人數,男生的人數
int match[N];//match[i]= x:表示男生i與女生x配對 
int found(int x)//看女生x能否找到和自己搭檔的男生 
{

	//從自己喜歡的男生裡面去找 
	for(int i=1; i<=n; i++)
	{
		//如果女生x願意和男生i做搭檔,並且女生x還沒有
//找過男生i if(g[x][i]&&!used[i]) { //那麼女生x嘗試找男生i used[i] = 1; //如果男生i還沒有女搭檔,或者,男生i的 //女搭檔還可以找到另外的女生做搭檔 if(!match[i]||found(match[i])) { match[i] = x; return 1; } } } return 0; } int main() { while(cin>>k&&k) { //由於是多組輸入,記得每次初始化 memset
(g,0,sizeof g); memset(match,0,sizeof match); scanf("%d%d",&m,&n); while(k--) { int u,v; scanf("%d%d",&u,&v); g[u][v] = 1; } int ans = 0; //注意這裡是1~m,列舉每一個女生能否找到男夥伴 for(int i=1; i<=m; i++){ memset(used,0, sizeof used); if(found(i)) ans++; } cout<<
ans<<endl; } return 0; }