匈牙利算法:
int match[140];
bool flag[140];
int map[140][140];
int dfs(int p)
{
int i;
for(i=1;i<=N;i++)
{
if(map[p][i]==1&&flag[i]==0)
{
flag[i]=1;
if(match[i]==-1||dfs(match[i]))
{
match[i]=p;return 1;
}
}
}
return 0;
}
void hungary()
{
int i;
for(i=1;i<=N;i++)
{
memset(flag,0,sizeof(flag));
if(dfs(i))
P++;
}
}