6 3 3 1 1 1 2 1 3 2 1 2 3 3 1 0
3
感受了一下新算法,感觉还可以,还能接受 = =
这道题算是这个算法最基础的题吧,看起来还需要加油啊!
代码如下:
#include <cstdio> #include <cstring> int fr[505][505]; //是否愿意一组 int used[505]; int F[505]; //某男生与女生的匹配情况 int k,m,n; //组合数,女生数,男生数 bool find(int x) { for (int i = 1 ; i <= n ; i++) { if (fr[x][i] && !used[i]) //此女生愿意和男生一起且男生没有在之前查找过 { used[i] = 1; //查找完后标记一下 if (F[i]) //若不为0则匹配过女生 { if (find(F[i])) //查看其匹配的女生是否还可以与其他男生匹配(从而让出这个男生) { F[i] = x; return true; } } else //该男生没有匹配,那么就和该女生匹配吧 { F[i] = x; return true; } } } return false; } int main() { int ans; while (~scanf ("%d",&k) && k) { scanf ("%d %d",&m,&n); memset (fr,0,sizeof (fr)); memset (F,0,sizeof (F)); ans = 0; while (k--) { int x,y; scanf ("%d %d",&x,&y); fr[x][y] = 1; } for (int i = 1 ; i <= m ; i++) { memset (used,0,sizeof (used)); if (find(i)) ans++; } printf ("%d\n",ans); } return 0; }