㈠ 最大流 flow函数的n,s,t,分别代表什么
function [f,wf,No]=MaxFlowMinCut_Me(n,C)
% 利用Ford--Fulkerson 标号求流算MATLAB 程序代码
% f %显示流
% wf %显示流量
% No %显示标号, 由割
% n 节点数
% C %弧容量
% Example:
% n=8;
% C=[0 5 4 3 0 0 0 0
% 0 0 0 0 5 3 0 0
% 0 0 0 0 0 3 2 0
% 0 0 0 0 0 0 2 0
% 0 0 0 0 0 0 0 4
% 0 0 0 0 0 0 0 3
% 0 0 0 0 0 0 0 5
% 0 0 0 0 0 0 0 0];
% [f,wf,No]=MaxFlowMinCut_Me(n,C)
for(i=1:n)for(j=1:n)f(i,j)=0;end;end %取初始行流f 零流
for(i=1:n)No(i)=0;d(i)=0;end %No,d 记录标号
while(1)
No(1)=n+1;d(1)=Inf; %给发点vs 标号
while(1)pd=1; %标号程
for(i=1:n)if(No(i)) %选择已标号点vi
for(j=1:n)if(No(j)==0&f(i,j)<C(i,j)) %于未给标号点vj, vivj 非饱弧
No(j)=i;d(j)=C(i,j)-f(i,j);pd=0;
if(d(j)>d(i))d(j)=d(i);end
elseif(No(j)==0&f(j,i)>0) %于未给标号点vj, vjvi 非零流弧
No(j)=-i;d(j)=f(j,i);pd=0;
if(d(j)>d(i))d(j)=d(i);end;end;end;end;end
if(No(n)|pd)break;end;end %若收点vt 标号或者标号, 终止标号程
if(pd)break;end %vt 未标号, f 已流, 算终止
dvt=d(n);t=n; %进入调整程, dvt 表示调整量
while(1)
if(No(t)>0)f(No(t),t)=f(No(t),t)+dvt; %前向弧调整
elseif(No(t)<0)f(No(t),t)=f(No(t),t)-dvt;end %向弧调整
if(No(t)==1)for(i=1:n)No(i)=0;d(i)=0; end;break;end %t 标号vs , 终止调整程
t=No(t);end;end; %继续调整前段弧流f
wf=0;for(j=1:n)wf=wf+f(1,j);end
end