匈牙利算法匈牙利算法在计算机C++语言编程中怎么应用?

匈牙利算法  时间:2021-07-16  阅读:()

能不能把你的基于matlab的匈牙利算法的代码发给我啊!谢谢了

unction [z,an]=fenpei(marix) %输入效率矩阵 marix 为方阵; %若效率矩阵中有 M,则用一充分大的数代替; %输出z为最优解,an为 最优分配矩阵; a=marix; b=a; %确定矩阵维数 s=length(a); %确定矩阵行最小值,进行行减 ml=min(a’); for i=1:s a(i,:)=a(i,:)-ml(i); end %确定矩阵列最小值,进行列减 mr=min(a); for j=1:s a(:,j)=a(:,j)-mr(j); end % start working num=0; while(num~=s) %终止条件是“(0)”的个数与矩阵的维数相同 %index用以标记矩阵中的零元素,若a(i,j)=0,则index(i,j)=1,否则index(i,j)=0 index=ones(s); index=a&index; index=~index; %flag用以标记划线位,flag=0 表示未被划线, %flag=1 表示有划线过,flag=2 表示为两直线交点 %an用以记录 a 中“(0)”的位置 %循环后重新初始化flag,an flag = zeros(s); an = zeros(s); %一次循环划线全过程,终止条件是所有的零元素均被直线覆盖, %即在flag>0位,index=0 while(sum(sum(index))) %按行找出“(0)”所在位置,并对“(0)”所在列划线, %即设置flag,同时修改index,将结果填入an for i=1:s t=0; l=0; for j=1:s if(flag(i,j)==0&&index(i,j)==1) l=l+1; t=j; end end if(l==1) flag(:,t)=flag(:,t)+1; index(:,t)=0; an(i,t)=1; end end %按列找出“(0)”所在位置,并对“(0)”所在行划线, %即设置flag,同时修改index,将结果填入an for j=1:s t=0; r=0; for i=1:s if(flag(i,j)==0&&index(i,j)==1) r=r+1; t=i; end end if(r==1) flag(t,:)=flag(t,:)+1; index(t,:)=0; an(t,j)=1; end end end %对 while(sum(sum(index))) %处理过程 %计数器:计算an中1的个数,用num表示 num=sum(sum(an)); % 判断是否可以终止,若可以则跳出循环 if(s==num) break; end %否则,进行下一步处理 %确定未被划线的最小元素,用m表示 m=max(max(a)); for i=1:s for j=1:s if(flag(i,j)==0) if(a(i,j)<M) m=a(i,j); end end end end %未被划线,即flag=0处减去m;线交点,即flag=2处加上m for i=1:s for j=1:s if(flag(i,j)==0) a(i,j)=a(i,j)-m; end if(flag(i,j)==2) a(i,j)=a(i,j)+m; end end end end %对while(num~=s) %计算最优(min)值 zm=an.*b; z=sum(sum(zm));

什么是匈牙利法?

匈牙利法是求解及小型(优化方向为极小)指派问题的一种方法,这种方法最初由w.w.kuhn提出,后经改进而形成,解法基于匈牙利数学家D.K?nig给出的一个定理而得名。

什么是匈牙利算法

谈匈牙利算法自然避不开Hall定理,即是:对于二部图G,存在一个匹配M,使得X的所有顶点关于M饱和的充要条件是:对于X的任意一个子集A,和A邻接的点集为T(A),恒有: │T(A)│ >= │A│ 匈牙利算法是基于Hall定理中充分性证明的思想,其基本步骤为: 1.任给初始匹配M; 2.若X已饱和则结束,否则进行第3步; 3.在X中找到一个非饱和顶点x0,作V1 ← {x0}, V2 ← Φ; 4.若T(V1) = V2则因为无法匹配而停止,否则任选一点y ∈T(V1)V2; 5.若y已饱和则转6,否则做一条从x0 →y的可增广道路P,M←M?E(P),转2; 6.由于y已饱和,所以M中有一条边(y,z),作 V1 ← V1 ∪{z}, V2 ← V2 ∪ {y}, 转4; 设数组up[1..n] --- 标记二分图的上半部分的点。

down[1..n] --- 标记二分图的下半部分的点。

map[1..n,1..n] --- 表示二分图的上,下部分的点的关系。

True-相连, false---不相连。

over1[1..n],over2[1..n] 标记上下部分的已盖点。

use[1..n,1..n] - 表示该条边是否被覆盖 。

首先对读入数据进行处理 ,对于一条边(x,y) ,起点进集合up,终点进集合down。

标记map中对应元素为true。

1. 寻找up中一个未盖点 。

2. 从该未盖点出发 ,搜索一条可行的路线 ,即由细边出发, 由细边结束, 且细粗交错的路线 。

3. 若找到 ,则修改该路线上的点所对应的over1,over2,use的元素。

重复步骤1。

4. 统计use中已覆盖的边的条数total,总数n减去total即为问题的解。

匈牙利算法在计算机C++语言编程中怎么应用?

匈牙利算法是图论中完成二分图匹配的经典算法之一.输入排队的Crossbar调度算法是以获得交换机的输入端口和输出端口最大匹配,从而得到高吞吐量为目的.因而在调度算法理论研究中应用了二分图最大匹配的Maximum Size Matching(MSM)和 Maximum Weight Matching(MWM)算法成为各种调度算法性能的评价标准.文中介绍了匈牙利算法在输入排队调度算法仿真中的应用,并且得出相应典型算法的性能仿真曲线,从而为进一步研究调度算法打下理论基础.

DMIT(8.72美元)日本国际线路KVM月付8折起,年付5折

DMIT.io是成立于2018年的一家国外主机商,提供VPS主机和独立服务器租用,数据中心包括中国香港、美国洛杉矶和日本等,其中日本VPS是新上的节点,基于KVM架构,国际线路,1Gbps带宽,同时提供月付循环8折优惠码,或者年付一次性5折优惠码,优惠后最低每月8.72美元或者首年65.4美元起,支持使用PayPal或者支付宝等付款方式。下面列出部分日本VPS主机配置信息,价格以月付为例。CPU:...

Megalayer(月599元)限时8月香港和美国大带宽服务器

第一、香港服务器机房这里我们可以看到有提供四个大带宽方案,是全向带宽和国际带宽,前者适合除了中国大陆地区的全网地区用户可以用,后者国际带宽适合欧美地区业务。如果我们是需要大陆地区速度CN2优化的,那就需要选择常规的优化带宽方案,参考这里。CPU内存硬盘带宽流量价格选择E3-12308GB240GB SSD50M全向带宽不限999元/月方案选择E3-12308GB240GB SSD100M国际带宽不...

Asiayun:枣庄电信Asiayun美国Cera葵湾VPSvps月付,美国CERA VPS月付26元/年

亚洲云Asiayun怎么样?亚洲云成立于2021年,隶属于上海玥悠悠云计算有限公司(Yyyisp),是一家新国人IDC商家,且正规持证IDC/ISP/CDN,商家主要提供数据中心基础服务、互联网业务解决方案,及专属服务器租用、云服务器、云虚拟主机、专属服务器托管、带宽租用等产品和服务。Asiayun提供源自大陆、香港、韩国和美国等地骨干级机房优质资源,包括BGP国际多线网络,CN2点对点直连带宽以...

匈牙利算法为你推荐
科来网络分析系统谁会用最新版的科来网络分析系统破解星空极速帐号和密码``!!!急急急```!!图片地址如何根据一张图片的地址找到它在哪发的论坛源码求高手推荐一个好的论坛源码?要可以购买版权的那种,要便宜的rbf神经网络RBF神经网络和BP神经网络有什么区别洗牌算法c语言编程用扑克牌洗牌和发牌拓扑关系简述空间数据的拓扑关系及其对GIS数据处理和空间分析有何重要意义?问卷星登陆你好,如果之前用微信登录了问卷星小程序,以后每次回答都不需要微信登录了吗?回答了会被知道个人信息吗layoutsubviews如何设置plus.nativeui.toast的样式qq号码查询知道qq怎样查手机号码screencapture电脑qq问题:点击qq邮箱与空间,弹出Screen Capture Control 进入不了qq邮箱与空间,怎么解决?
windows虚机 万网域名代理 阿里云邮箱登陆首页 vps.net cve-2014-6271 香港托管 服务器怎么绑定域名 远程登陆工具 java空间 qq数据库下载 免费个人空间申请 空间合租 美国堪萨斯 国外免费asp空间 服务器监测 ca187 网站在线扫描 万网主机管理 上海电信测速 中国域名 更多