代码:
function [z,x_ij]=xiongyalifa(a)
%输出z为最小值,x_ij为最优解;
b=a;
%确定矩阵维数
s=length(a);
%第一步:使指派问题的系数矩阵经变换,在各行各列中都出现0元素。
%减去每行的最小值
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
% 第二步:进行试指派,以寻求最优解。
num=0;
while(num~=s) %终止条件是独立0元素的个数与s相等
%index为独立0元素:若a(i,j)=0,则index(i,j)=1,否则index(i,j)=0
%flag为线:flag=0无线,flag=1有线过,flag=2交点
%x_ij用以记录a中独立0元素的位置
index=ones(s);
index=a&index;
index=~index;
%循环后重新初始化flag,x_ij
flag = zeros(s);
x_ij = zeros(s);
%一次循环划线全过程,终止条件是所a=有的零元素均被直线覆盖
while(sum(sum(index)))
%找出只有一个0元素的行,对其所在列划线
for i=1:s
t=0;
l=0;
for j=1:s
if(flag(i,j)==0&&index(i,j)==1)
l=l&
文章来源地址https://www.toymoban.com/news/detail-514014.html
文章来源:https://www.toymoban.com/news/detail-514014.html
到了这里,关于匈牙利法的Matlab代码及测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!