匈牙利算法的MATLAB代码

上传人:壹****1 文档编号:543815273 上传时间:2022-11-20 格式:DOCX 页数:4 大小:11.16KB
返回 下载 相关 举报
匈牙利算法的MATLAB代码_第1页
第1页 / 共4页
匈牙利算法的MATLAB代码_第2页
第2页 / 共4页
匈牙利算法的MATLAB代码_第3页
第3页 / 共4页
匈牙利算法的MATLAB代码_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《匈牙利算法的MATLAB代码》由会员分享,可在线阅读,更多相关《匈牙利算法的MATLAB代码(4页珍藏版)》请在金锄头文库上搜索。

1、程序文件 fenpei.mfunction z,ans=fenpei(marix) %/%输入效率矩阵 marix 为方阵;%若效率矩阵中有M,则用一充分大的数代替;%输出z为最优解,ans为最优分配矩阵;%/a=marix;b=a;%确定矩阵维数s=length(a);%确定矩阵行最小值,进行行减ml=min(a);for i=1:sa(i,:)=a(i,:)-ml(i);end%确定矩阵列最小值,进行列减mr=min(a);for j=1:sa(:,j)=a(:,j)-mr(j);end% start workingnum=0;while(num=s) %终止条件是“(0)”的个数与矩阵的

2、维数相同%index用以标记矩阵中的零元素,若a(i,j)=O,则index(i,j)=l,否则index(i,j)=O index=ones(s); index=a&index; index=index;%flag 用以标记划线位, flag=0 表示未被划线,%flag=l 表示有划线过, flag=2 表示为两直线交点%ans 用以记录 a 中“(0)”的位置%循环后重新初始化 flag,ansflag = zeros(s);ans = zeros(s);%一次循环划线全过程,终止条件是所有的零元素均被直线覆盖,%即在 flag0 位,index=O while(sum(sum(inde

3、x)%按行找出“(0)”所在位置,并对“(0)”所在列划线,%即设置flag,同时修改index,将结果填入ansfor i=l:st=0;l=0;for j=l:sif(flag(i,j)=0&index(i,j)=l)l=l+1;t=j;endendif(l=1) flag(:,t)=flag(:,t)+1; index(:,t)=0; ans(i,t)=1;endend %按列找出“(0)”所在位置,并对“(0)”所在行划线%即设置flag,同时修改index,将结果填入ansfor j=1:st=0;r=0;for i=1:s if(flag(i,j)=0&index(i,j)=1)

4、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)break;end%否则,进行下一步处理%确定未被划线的最小元素,用m表示 m=max(max(a);for i=1:sfor j=1:sif(flag(i,j)=0) if(a(i,j) a=37.732.938.83735.443.433.142.234.741.833.328.538.930.433.629.226.429.628.531.100000; z,ans=fenpei(a)z =127.8000ans =0000100010010001000000100111222202443311072244770355775504339966088811440666121211110599131312120

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号