匈牙利算法的MATLAB代码.doc

匈牙利算法的MATLAB代码.doc

ID:53126423

大小:19.50 KB

页数:4页

时间:2020-04-01

匈牙利算法的MATLAB代码.doc_第1页
匈牙利算法的MATLAB代码.doc_第2页
匈牙利算法的MATLAB代码.doc_第3页
匈牙利算法的MATLAB代码.doc_第4页
资源描述:

《匈牙利算法的MATLAB代码.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、程序文件fenpei.mfunction[z,ans]=fenpei(marix)%//////////////////////////////////////////////////%输入效率矩阵marix为方阵;%若效率矩阵中有M,则用一充分大的数代替;%输出z为最优解,ans为最优分配矩阵;%//////////////////////////////////////////////////a=marix;b=a;%确定矩阵维数s=length(a);%确定矩阵行最小值,进行行减ml=min(a');fori=1:sa(i,:)=a(i,:)-ml(i);end%

2、确定矩阵列最小值,进行列减mr=min(a);forj=1:sa(:,j)=a(:,j)-mr(j);end%startworkingnum=0;while(num~=s)%终止条件是“(0)”的个数与矩阵的维数相同%index用以标记矩阵中的零元素,若a(i,j)=0,则index(i,j)=1,否则index(i,j)=0index=ones(s);index=a&index;index=~index;%flag用以标记划线位,flag=0表示未被划线,%flag=1表示有划线过,flag=2表示为两直线交点%ans用以记录a中“(0)”的位置%循环后重新初始化fl

3、ag,ansflag=zeros(s);ans=zeros(s);%一次循环划线全过程,终止条件是所有的零元素均被直线覆盖,%即在flag>0位,index=0while(sum(sum(index)))%按行找出“(0)”所在位置,并对“(0)”所在列划线,%即设置flag,同时修改index,将结果填入ansfori=1:st=0;l=0;forj=1:sif(flag(i,j)==0&&index(i,j)==1)l=l+1;t=j;endendif(l==1)flag(:,t)=flag(:,t)+1;index(:,t)=0;ans(i,t)=1;endend

4、%按列找出“(0)”所在位置,并对“(0)”所在行划线,%即设置flag,同时修改index,将结果填入ansforj=1:st=0;r=0;fori=1:sif(flag(i,j)==0&&index(i,j)==1)r=r+1;t=i;endendif(r==1)flag(t,:)=flag(t,:)+1;index(t,:)=0;ans(t,j)=1;endendend%对while(sum(sum(index)))%处理过程%计数器:计算ans中1的个数,用num表示num=sum(sum(ans));%判断是否可以终止,若可以则跳出循环if(s==num)br

5、eak;end%否则,进行下一步处理%确定未被划线的最小元素,用m表示m=max(max(a));fori=1:sforj=1:sif(flag(i,j)==0)if(a(i,j)

6、sum(zm));/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////运行实例:>>a=[37.732.938.83735.443.433.142.234.741.833.328.538.930.433.629.226.429.628.531.100000];>>[

7、z,ans]=fenpei(a)z=127.8000ans=0000100010010001000000100111222202443311072244770355775504339966088811440666121211110599131312120

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。