也拿这个当模板吧。。。
#include#include int k, m, n;bool g[510][510];int visit[510], link[510];bool dfs(int u){ for(int i = 1; i <= n; i ++){ if(g[u][i] && !visit[i]){ visit[i] = 1; if(link[i] == -1 || dfs(link[i])){ link[i] = u; return true; } } } return false;}int max_match(){ memset(link, -1, sizeof link); int ans = 0; for(int i = 1; i <= m; i ++){ memset(visit, 0, sizeof visit); if(dfs(i)) ans ++; } return ans;}int main(){ while(scanf("%d", &k), k){ scanf("%d%d", &m, &n); memset(g, 0, sizeof g); while(k --){ int u, v; scanf("%d%d", &u, &v); g[u][v] = true; } printf("%d\n", max_match()); } return 0;}
就是不断的DFS。。