代码:
clc,clear
u(1,2)=18;u(1,3)=19;u(1,4)=18;u(2,5)=18;u(2,7)=18;
u(3,5)=19;u(3,6)=19;u(3,8)=19;u(4,6)=18;u(4,7)=18;
u(5,9)=10;u(6,9)=20;u(7,9)=15;u(8,9)=10;
f(1,2)=0;f(1,3)=0;f(1,4)=0;f(2,5)=0;f(2,7)=0;
f(3,5)=0;f(3,6)=0;f(3,8)=0;f(4,6)=0;f(4,7)=0;
f(5,9)=0;f(6,9)=0;f(7,9)=0;f(8,9)=0;
n=length(u);list=[];maxf(n)=1;
while maxf(n)>0
maxf=zeros(1,n);pred=zeros(1,n);
list=1;record=list;maxf(1)=inf;
%list是未检查邻接点的标号点,record是已标号点
while (~isempty(list))&(maxf(n)==0)
flag=list(1);list(1)=[];
label1= find(u(flag,:)-f(flag,:));
label1=setdiff(label1,record);
list=union(list,label1);
pred(label1)=flag;
maxf(label1)=min(maxf(flag),u(flag,label1)...
-f(flag,label1));
record=union(record,label1);
label2=find(f(:,flag));
label2=label2';
label2=setdiff(label2,record);
list=union(list,label2);
pred(label2)=-flag;
maxf(label2)=min(maxf(flag),f(label2,flag));
record=union(record,label2);
end
if maxf(n)>0
v2=n; v1=pred(v2);
while v2~=1
if v1>0
f(v1,v2)=f(v1,v2)+maxf(n);
else
v1=abs(v1);
f(v2,v1)=f(v2,v1)-maxf(n);
end
v2=v1; v1=pred(v2);
end
end
end
f
少年不被楼层误,余生不羁尽自由。
加油,加油!