// ** Start of MaximumMatch ******************************* // Name: MaximumMatch by Hungray O(n^3) // Description: mat is the adjacency matrix, nx,ny are the size of x and y, // fy is used for marking whether the k-th node is visited, matx[x] means x // match matx[x], maty[y] means y match maty[y], actually, matx[x] is useless, // all the arrays start at 1 int nx,ny,mat[MAXN][MAXN],fy[MAXN],matx[MAXN],maty[MAXN]; int path(int u) { int v; for(v=1;v<=ny;v++) if((mat[u][v])&&(fy[v]<0)) { fy[v]=1; if((maty[v]<0)||(path(maty[v]))) { matx[u]=v; maty[v]=u; return(1); } // end of if((maty[v]... } // end of if((mat[u][v]... return(0); } // end of int path() int MaximumMatch() { int i,ret=0; memset(matx,-1,sizeof(matx)); memset(maty,-1,sizeof(maty)); for(i=1;i<=nx;i++) if(matx[i]<0) { memset(fy,-1,sizeof(fy)); ret+=path(i); } // end of if(matx[i]... return(ret); } // end of int MaximumMatch() // ** End of MaximumMatch *********************************