博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分图最大匹配算法-Hopcroft-Karp模板
阅读量:4708 次
发布时间:2019-06-10

本文共 1398 字,大约阅读时间需要 4 分钟。

时间复杂度:O((√V)*E)

#include
#include
const int N=500,M=500,INF=0x3f3f3f3f;int dx[N],dy[M],sx[N],sy[M],p[N],q[N],a[N][M],l,r,n,m,d;int bfs(){ l=r=0; memset(dx,-1,sizeof(dx)); memset(dy,-1,sizeof(dy)); int i,u;d=INF; for(i=1;i<=n;i++) { if(sx[i]==-1) { q[++r]=i; dx[i]=0; } } while(l
d) break; for(i=1;i<=m;i++) { if(a[u][i]&&dy[i]==-1) { dy[i]=dx[u]+1; if(sy[i]==-1) d=dy[i]; else { dx[sy[i]]=dy[i]+1; q[++r]=sy[i]; } } } } return d!=INF;}int dfs(int u){ for(int i=1;i<=m;i++) { if(a[u][i]&&!p[i]&&dy[i]==dx[u]+1) { p[i]=1; if(sy[i]!=-1&&dy[i]==d) continue; if(sy[i]==-1||dfs(sy[i])) { sy[i]=u,sx[u]=i; return 1; } } } return 0;}int HK_maxMatch(){ int ans=0,i; memset(sx,-1,sizeof(sx)); memset(sy,-1,sizeof(sy)); while(bfs()) { memset(p,0,sizeof(p)); for(i=1;i<=n;i++) { if(sx[i]==-1) { ans+=dfs(i); } } } return ans;}
H-K

 

转载于:https://www.cnblogs.com/L-King/p/5314298.html

你可能感兴趣的文章
【转】IT名企面试:微软笔试题(1)
查看>>
IO流入门-第十章-DataInputStream_DataOutputStream
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
SSH加固
查看>>
python 二维字典
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
Building Tablet PC Applications ROB JARRETT
查看>>
Adobe® Reader®.插件开发
查看>>
【POJ 3461】Oulipo
查看>>
Alpha 冲刺 (5/10)
查看>>
使用Siege进行WEB压力测试
查看>>
斑马为什么有条纹?
查看>>
android多层树形结构列表学习笔记
查看>>
Android_去掉EditText控件周围橙色高亮区域
查看>>