Fleury算法MATLAB 从始点出发经过一次每条边回到始点

M-文件 flecvexf
function[dvex,f]=flecvexf(matr,i,vexs,eds,ed,tem)
f=0;
edd=find(matr(vexs(1,i),:)==1);
dvex=0;
dvex1=[];
ded=[];
if length(edd)==1
dvex=edd;
else
dd=1;
dd1=0;
kkk=0;
else
dd=1;
dd1=0;
kkk=0;
for kk=1:length(edd)
m1=find(vexs==edd(kk));
if sum(m1)==0
dvex1(dd)=edd(kk);
dd=dd+1;
dd1=1;
else
kkk=kkk+1;
end
end
if kkk==length(edd)
tem=vexs(1,i)*ones(1,kkk);
edd1=[tem;edd];
for l1=1:kkk
lt=0;
ddd=1;
for l2=1:eds
if edd1(1:2,l1)==ed(1:2,l2)
lt=lt+1;
end
end
if lt==0
ded(ddd)=edd(l1);
ddd=ddd+1;
end
end
end
if tem<=length(dvex1)
dvex=dvex1(tem);
elseif tem>length(dvex1)&tem<=length(ded)
dvex=ded(tem);
else
f=1;
end
end

M-文件edf
function [flag,ed]=edf(matr,eds,vexs,ed,tem)
flag=1;
for i=2:eds
[dvexf]=flecvexf(matr,i,vexs,eds,ed,tem);
if f==1
flag=0;
break;
end
if dvex~=0
ed(:i)=[vexs(1,i);dvex];
vexs(1,i+1)=dvex;
matr(vexs(1,i+1),vexs(1,i))=0;
else
break;
end
end

最后

function T=Fleufl(d)
n=length(d);
b=d;
b(b==inf)=0;
b(b~=0)=1;
m=0;
a=sum(b);
eds=sum(a)/2;
ed=zerds(2,eds);
vexs=zeros(1,eds+1);
matr=b;
for i=1:n
if mod(a(i),2)==1
m=m+1;
end
end
if m~=0
fprintf(‘there is not exist Euler path.\n’);
T=0;
c=0;
end
if m==0
vet=1;
flag=0;
t1=find(matr(vet,:)==1);
for ii=1:length(t1)
ed(:1)=[vet;t1(ii)];
vex(1,1)=vet;
vex(1,2)=t1(ii);
matr(vexs(1,2),vexs(1,1))=0
flagg=1;
tem=1;
while flagg
[flagg,d]=edf(matr,eds,vexs,ed,tem);
tem=tem+1;
if ed(1,eds)~=0&ed(2,eds)~=0
T=ed;
T(2,eds)=1;
c=0;
for g=1:eds
c=c+d(T(1,g),T(2,g));
end
flagg=0;
break;
end
end
end
end
T
c

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值