设为首页 加入收藏

TOP

二分图最大匹配的匈牙利算法完整代码(二)
2014-11-23 22:38:39 】 浏览:6951
Tags:二分 最大 匹配 匈牙利 算法 完整 代码
(!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;
}
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇有序二叉树的实现 下一篇Java核心知识点学习----线程中如..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目