n^3的KM完美匹配算法(bfs迭代版本)
发布日期:2021-06-30 10:20:35
浏览次数:3
分类:技术文章
本文共 907 字,大约阅读时间需要 3 分钟。
代码中有些注释,还请学了n^4的dfs再来学习这个
#includeusing namespace std;#define int long longconst int inf=1e18;const int maxn=509;int n,m,cost[maxn][maxn],mat[maxn],pre[maxn];int wisha[maxn],wishb[maxn],va[maxn],vb[maxn],slack[maxn];void init(int a[],int b){ for(int i=0;i<=n;i++) a[i]=b;}void bfs(int u){ init( pre,0 ); init( slack,inf ); slack[0]=0; int x=0,y=0,yy=0,delta=0; mat[y]=u;//最开始0匹配u,为什么这么写,无关紧要,总要让一个开头嘛 while( 1 ) { x=mat[y], delta=inf, vb[y]=1;//现在是帮x找完美匹配 for(int i=1;i<=n;i++) { if( vb[i] ) continue;//本次访问过,不用管了 if( slack[i]>wisha[x]+wishb[i]-cost[x][i] ) { slack[i]=wisha[x]+wishb[i]-cost[x][i];//更新最小误差期望 pre[i]=y; } if( slack[i] > n >> m; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cost[i][j]=-inf; for(int i=1;i<=m;i++) { int l,r,w; cin >> l >> r >> w; cost[l][r]=max( cost[l][r],w ); } cout << km() << '\n'; for(int i=1;i<=n;i++) cout << mat[i] << " ";}
转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/108184149 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月25日 23时38分17秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
198.自定义数据类型修改存储过程
2019-04-30
199.自定义数据类型修改精度
2019-04-30
200.自定义数据类型修改
2019-04-30
201.创建与删除用户定义数据类型-案例
2019-04-30
202.为用户定义的数据类型绑定规则案例
2019-04-30
203.为用户定义的数据类型绑定默认值案例
2019-04-30
204.修改已经被表引用的数据定义数据类型-案例
2019-04-30
205.修改用户定义数据类型对已经编译的存储过程的影响的案例
2019-04-30
控件命名
2019-04-30
C++builder常用函数
2019-04-30
C++Builder文件操作大全
2019-04-30
用C++ Builder XE 10编译生成EXE运行问题
2019-04-30
Borland C++ Builder 6.0 XML处理总结
2019-04-30
DBGrid 应用全书
2019-04-30
C++ Builder API函数大全
2019-04-30
读取XML
2019-04-30
206.编程管理SQL SERVER的帐号
2019-04-30
207.SQL的安全管理
2019-04-30
208.SQL安全管理例子-创建一个只允许特定程序使用的数据库用户
2019-04-30
209.登录、用户及角色管理案例
2019-04-30