最裸的的匈牙利算法(不懂此算法及此算法应用的各种问题,我的其他博客中都有)
题目链接:点击打开链接
代码注释:
<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>