BFS 版本的匈牙利算法
来源:互联网 发布:介绍花苗可靠的淘宝店 编辑:程序博客网 时间:2024/05/18 14:22
#include<iostream>#include<vector>#include<unordered_set>#include<queue>#include<stack>#include<cstring>#include<queue>using namespace std;int hungry_bfs(vector<vector<int> >& bi_graph, int m, vector<int>& match) { int n = bi_graph.size(); match.clear(); match.resize(m, -1); int ret = 0; for (int i = 0; i < n; ++i) { unordered_set<int> visited; //记录访问过的右节点 vector<int> match_tmp(n, -1); //试探性匹配:l->r queue<int> Q; //试探顺序控制队列 Q.push(i); stack<int> S; //记录试探性匹配的左节点的顺序 bool ext = false; while (!Q.empty() && !ext) { int c = Q.front(); Q.pop(); for (int adj : bi_graph[c]) { if (visited.count(adj) != 0) continue; if (match[adj] == -1) { //构造增广链 match_tmp[c] = adj; S.push(c); while (!S.empty()) { int cc = S.top(); S.pop(); match[match_tmp[cc]] = cc; } match_tmp.clear(); ext = true; break; } else { visited.insert(adj); Q.push(match[adj]); match_tmp[c] = adj; S.push(c); } } if (ext) { ret += 1; } } } return ret;}int main() { int n, m; cin>>n>>m; int ne; cin>>ne; vector<vector<int> > bi_graph(n, vector<int>()); for (int i = 0; i < ne; ++i) { int l, r; cin>>l>>r; bi_graph[l].push_back(r); } vector<int> match; int ret = hungry_bfs(bi_graph, m, match); cout<<ret<<endl; return 0;}
阅读全文
0 0
- BFS 版本的匈牙利算法
- 匈牙利算法的Java版本
- hdu_2063 过山车 匈牙利算法的bfs写法
- 【匈牙利算法】匈牙利模板dfs、bfs
- 匈牙利算法java版本
- 二分图(bfs+匈牙利算法)
- POJ2239匈牙利算法BFS实现
- hdu_2389 Rain on your Parade 匈牙利算法的bfs实现
- Hopcroft-Karp算法模板(匈牙利算法的优化版本)
- 匈牙利算法的疑问
- 匈牙利算法的理解。
- 匈牙利算法的理解
- 匈牙利算法的理解
- 匈牙利算法的学习
- 漂亮的匈牙利算法
- 通俗易懂的匈牙利算法
- 二分图(bfs+匈牙利算法) POJ 1469 course
- 【二分图匹配】最大匹配-匈牙利算法BFS && DFS写法
- gantt图demo
- gdb调试多进程、多线程
- csdn 普通编辑器 代码样式 代码高亮 高亮代码皮肤更换
- springboot+mybatis(读写分离)
- 整洁代码中的魔术值
- BFS 版本的匈牙利算法
- 计算机网络中的七层模型
- 算法第4版(谢路云译)学习笔记(1) -- 课后习题答案
- 大讲台 Hadoop 面试过关必备
- Android 蓝牙强度Rssi
- WebAPI Rest机制
- Android使用FFmpeg 解码H264并播放(三)
- P2P 之UDP穿透NAT的原理与实现 whood
- kw和Fortify扫描中的修复ServerSocketChannel资源泄露引发的问题