这道题是一个基础二分匹配的题目,由于博主在做这道题的时候还没有学习二分匹配的知识,就用DFS强行怼过去了
#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
using namespace std;
bool map[505][505];
bool vis[505];//男生是否已经组成搭档。
int link[505];
int k,n,m;
bool dfs(int x)
{
for(int i=1;i<=m;i++)
{
if(!vis[i]&&map[x][i])
{
vis[i]=true;
if(!link[i]||dfs(link[i]))//找是否此男生已和其他女生搭档,如果有,且那个女生也可以有其他搭档,就返回真值,否则继续查找。
{
link[i]=x;
return true;
}
}
}
return false;
}
int main()
{
while(cin>>k&&k)
{
cin>>n>>m;
memset(map,false,sizeof(map));
memset(link,0,sizeof(link));
for(int i=0; i<k; i++)
{
int girl,boy;
cin>>girl>>boy;
map[girl][boy]=true;
}
int ans=0;
for(int i=1; i<=n; i++)
{
memset(vis,false,sizeof(vis));
if(dfs(i))
ans++;
}
cout<<ans<<endl;
}
return 0;
}
本文介绍了一个基础二分匹配问题的解决方法,并通过一个具体的编程实现案例进行了解释。使用深度优先搜索(DFS)来寻找可能的最大匹配,适用于男生与女生配对的问题场景。文章包含完整的 C++ 代码示例。
&spm=1001.2101.3001.5002&articleId=71079669&d=1&t=3&u=d97497f9a4c2457eba32b249c7589188)
621

被折叠的 条评论
为什么被折叠?



