Hopcroft-Karp算法模板
来源:互联网 发布:淘宝色差问题怎么回复 编辑:程序博客网 时间:2024/05/16 18:27
http://blog.csdn.net/u011742541/article/details/14104573
//Hopcroft-Karp算法 有点类似dinic 都是先对图BFS分层再沿层数DFS找增广路 //*************************************************************************** bool searchPath() //BFS 对二分图分层 { dist = inf; queue<int>que; memset( dx,-1,sizeof(dx) ); memset( dy,-1,sizeof(dy) ); for( int i = 1; i <= nx; i ++ ){ //找到x集合所有未被匹配的点压入队列中 if( cx[i] == -1 ){ que.push(i); dx[i] = 0; } } while( !que.empty() ){ int u = que.front(); que.pop(); if( dx[u] > dist ) //只分层到第一个找个的可匹配点层数 break; for( int v = 1; v <= ny; v ++ ) { if( map[u][v] && dy[v] == -1 ){ dy[v] = dx[u] + 1; if( cy[v] == -1 ) //找个一个可以匹配点 标记分层的层数 dist = dy[v]; else{ dx[cy[v]] = dy[v] + 1; que.push( cy[v] ); } } } } return dist != inf; } bool findPath( int u ) //沿着层数DFS { for( int v = 1; v <= ny; v ++ ){ if( map[u][v] && !vis[v] && dy[v] == dx[u] + 1 ){ vis[v] = true; if( cy[v] != -1 && dy[v] == dist ) //如果v已经有匹配了且v的层数为dist( 最大层数为dist 所以v原来匹配的不可能再匹配 ) continue; if( cy[v] == -1 || findPath( cy[v] ) ){ //如果v未匹配就跟u匹配v 否则看v原来匹配的是否还能跟其他的匹配 能就跟u匹配 不能就不匹配 cy[v] = u; cx[u] = v; return true; } } } return false; } int HK_MaxMatch() { int ans = 0; memset( cx,-1,sizeof(cx) ); memset( cy,-1,sizeof(cy) ); while( searchPath() ){ //分层 + 判断是否还有未匹配点 memset( vis,0,sizeof(vis) ); for( int i = 1; i <= nx; i ++ ){ if( cx[i] == -1 ) ans += findPath(i); } } return ans; } //***************************************************************************
- Hopcroft-Karp算法模板
- 【二分图匹配】Hopcroft-Karp算法模板
- Hopcroft-Karp算法
- Hopcroft-Karp算法
- Hopcroft-karp 算法
- Hopcroft-Karp算法
- 【模板整合】匈牙利算法和Hopcroft-Karp算法
- Hopcroft-Karp算法模板(匈牙利算法的优化版本)
- 二分图最大匹配算法-Hopcroft-Karp模板
- Hopcroft-Karp模板学习小结
- 【Hopcroft Karp】HK算法简介
- HDU-1045 Hopcroft-Karp算法
- 二分匹配Hopcroft-Karp算法
- Hopcroft-Karp算法代码解释:
- Hopcroft-Karp算法模板(解决二分图最大匹配问题)
- 最大匹配的Hopcroft-Karp算法
- hdu2389+二分匹配(Hopcroft-Karp算法)
- 二分图最大匹配之Hopcroft-Karp算法
- 可拖拉的Table jquery 实现
- 简单模拟LinkedList
- 特征向量的归一化方法
- 推荐书
- Android WebView缓存机制详解
- Hopcroft-Karp算法模板
- 翻开新的页章。
- VB中判断.NET3.5是否安装
- 判断矩形是否相交
- centOS yacc lex
- 设计模式之----------迭代器
- Spatial Join in SIGMOD(1993-1997)
- 已知后序跟中序求先序
- oracle中的exists 和not exists 用法