(!findAugmentPathA)
{
int aPoint;
bool findAugmentPathB = false;
for(int j=que[counter].currentpartner+1;j
{
if(connection[que[counter].element][j]==1 && match[que[counter].element][j]==0 && !bPointInMatch(j))//找到增广路径的情况
{
que[counter].currentpartner++;
findAugmentPathA = true;
//B入栈
counter++;
queElem.element = j;
queElem.currentpartner = -1;
que.push_back(queElem);
break;
}
else if(connection[que[counter].element][j]==1 && match[que[counter].element][j]==0 && bPointInMatch(j))
{
que[counter].currentpartner++;
findAugmentPathB = true;
counter++;//B入栈
queElem.element = j;
queElem.currentpartner = -1;
que.push_back(queElem);
//由B找到下一个A并入栈
aPoint = bFindMatchPoint(j);
counter++;
queElem.element = aPoint;
queElem.currentpartner = -1;
que.push_back(queElem);
break;
}
else{
//TODO:可以把下面的if放到这里来吗?
}
}
if(!findAugmentPathB)
{
counter = counter-2;
}
}
}
//修改最大匹配
if(findAugmentPathA==true)
{
bool direction = false;
for(int i=0;i
{
if(direction==false)
{
direction=true;
match[que[i].element][que[i+1].element]=1;
}
else{
direction=false;
match[que[i+1].element][que[i].element]=0;
}
}
}
while(que.size()>0)//清空队列
{
que.pop_front();
}
}
//输出最大匹配
for(int i=0;i
{
for(int j=0;j
{
if(match[i][j]==1)
{
cout<<"("<
break;
}
}
}
}
int main()
{
init();
maxMatch();
return 0;
}