#include #define maxn 1000 int n, m, pa[maxn], u[maxn], c[maxn][maxn]; int dfs( int v ) { u[v] = 1; for (int x = 0; x < n; x++) if (c[v][x]) if (pa[x] == -1 || (u[pa[x]] == 0 && dfs(pa[x]))) { pa[x] = v; return 1; } return 0; } int main() { memset(pa, -1, sizeof(pa)); for (int i = 0; i < n; i++) { memset(u, 0, sizeof(u)); dfs(i); } return 0; }