标题:匈牙利算法的matlab程序实现
取消只看楼主
gospel125
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-4-29
 问题点数:0 回复次数:1 
匈牙利算法的matlab程序实现
function [result,msum]=sbppp(cost,m)
if nargin==1
dd=cost;
else
dd=max(max(cost))-cost;
end
[nop,nop]=size(cost);msum=0;
for i=1:nop
dd(i,:)=dd(i,:)-min(dd(i,:));
end
for j=1:nop
dd(:,j)=dd(:,j)-min(dd(:,j));
end
backup=dd;
for z=1:nop
bh=nop;bl=nop;result=[];
for k=1:nop
for i=1:nop
h=find(dd(i,:)==0);
if length(h)~=0&length(h)<bh
bh=length(h);
ch=i;
end
end
L=find(dd(ch,:)==0);
for j=1:length(L)
l=find(dd(:,L(j))==0);
if length(l)<bl
bl=length(l);
cl=L(j);
end
end
result(1,k)=ch;result(2,k)=cl;
dd(ch,:)=1;dd(:,cl)=1;
bl=nop;bh=nop;
if length(find(dd==0))==0
break
end
end
if length(result(1,:))==nop
break
end
dd=backup;DD=dd;d=zeros(nop);
for i=1:length(result(1,:))
d(result(1,i),result(2,i))=1;
end
D=~(d+dd);
p=[];q=[];k=1;zx=inf;
for i=1:nop
if sum(d(i,:))==0
p(k)=i;
k=k+1;
end
end
for j=1:length(p)
q=find(D(p(j),:)==1);
for e=1:length(q)
pp=find(d(:,q(e))==1);
if pp~=0
p(k)=pp;
k=k+1;
end
end
end
for l=1:length(p)
q=find(D(p(l),:)==1);
for u=1:length(q)
DD(:,q(u))=inf;
end
end
for l=1:length(p)
if min(DD(p(l),:))<zx
zx=min(DD(p(l),:));
end
end
for l=1:length(p)
q=find(D(p(l),:)==1);
for u=1:length(q)
dd(:,q(u))=dd(:,q(u))+zx;
end
end
for l=1:length(p)
dd(p(l),:)=dd(p(l),:)-zx;
end
backup=dd;
end
for i=1:length(result(1,:))
msum=msum+cost(result(1,i),result(2,i));
end
这是我找到的匈牙利算法的matlab程序,可我不知道怎么在matlab中实现。请各位大虾帮帮忙啊,帮我看看到底咋实现。谢谢了。
搜索更多相关主题的帖子: 匈牙利 matlab 算法 nop 
2007-04-29 13:04
gospel125
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-4-29
得分:0 
运行到42行时,我觉得后面的没有必要了嘛。如果直接给出一个可以完美匹配的矩阵的话,前面的代码就能直接得出一个完美匹配了。谁能告诉我后面的有什么用?给我一个具体矩阵让我试试啊?
2007-04-30 21:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-135908-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.119533 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved