ハンガリーアルゴリズム-ダンサーを探す
詳細
#include
#include
using namespace std;
const int MAXN = 100;
int uN, vN; // u,v ,u ,v
bool g[MAXN][MAXN]; // g[i][j] xi yj ,
int xM[MAXN], yM[MAXN]; // , ,-1
bool chk[MAXN]; // y[v] check
bool SearchPath(int u){
int v;
for(v = 0; v < vN; v++) {
if(g[u][v] && !chk[v]){ // , (chk[v] , , )
chk[v] = true;
if(yM[v] == -1 || SearchPath(yM[v])) // , ( )
{
yM[v] = u; //
xM[u] = v; //
return true ; // ,
}
}
}
return false ; // ,
}
int MaxMatch(){
int u;
int ret = 0 ;
memset(xM, -1, sizeof (xM));
memset(yM, -1, sizeof (yM));
for(u = 0; u < uN; u++)
{
if(xM[u] == -1) //-1
{
memset(chk, false, sizeof (chk)); //
if(SearchPath(u)) ret++; //
}
}
return ret;
}