最裸的的匈牙利算法(不懂此算法及此算法應用的各種問題,我的其他博客中都有)
題目鏈接:點擊打開鏈接
代碼註釋:
<strong><span style="font-size:18px;color:#ff6600;">#include<iostream>
#include<cstring>
using namespace std;
#define N 505
int a[N][N],visit[N],link[N];
int k,n,m;
int dfs(int i)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]&&!visit[j])<span style="font-family: Arial, Helvetica, sans-serif;">//兩點有關聯切該點未被訪問</span>
{
visit[j]=1;
if(link[j]==-1||dfs(link[j]))//<span style="font-family: Arial, Helvetica, sans-serif;">如果該點沒有與其他點關聯或者 與之關聯的點 由遞歸可以找到其他點與之相連</span>
{
link[j]=i;
return 1;
}
}
}
return 0;
}
int hungary()
{
int sum=0;
memset(link,-1,sizeof(link));
for(int i=1;i<=m;i++)
{
memset(visit,0,sizeof(visit));
if(dfs(i))
sum++;
}
return sum;
}
int main()
{
while(cin>>k,k)
{
memset(a,0,sizeof(a));
cin>>m>>n;
while(k--)
{
int x,y;
cin>>x>>y;
a[x][y]=1;
}
cout<<hungary()<<endl;
}
}</span></strong>