【正文】
(1)=Inf。 while (1) pd=1。 for (i=1:n) if (No(i)) for (j=1:n) if (No(j)==0 amp。 f(i,j)C(i,j)) 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 amp。 f(j,i)0) 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 if (pd) break。 end dvt=d(n)。t=n。 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=No(t)。 endendwf=0。for (j=1:n) wf=wf+f(1,j)。endf。wf。程序二:BusackerGowan算法(求最大流最小費用)%C=[0 15 16 0 0。0 0 0 13 14。0 11 0 17 0。0 0 0 0 8。0 0 0 0 0]%b=[0 4 1 0 0。0 0 0 6 1。0 2 0 3 0。0 0 0 0 2。0 0 0 0 0]%function [f wf zwf]=BGf(C,b)%C表示弧容量矩陣%b表示弧上單位流量的費用%f表示最大流最小費用矩陣%wf最大流量%zwf表示最小費用n=size(C,2)。wf=0。wf0=inf。f=zeros(n,n)。while (1) a=ones(n,n)*inf。 for (i=1:n) a(i,i)=0。 end for (i=1:n) for (j=1:n) if(C(i,j)0 amp。 f(i,j)==0) a(i,j)=b(i,j)。 elseif (C(i,j)0 amp。 f(i,j)==C(i,j)) a(j,i)=b(i,j)。 elseif (C(i,j)0) a(i,j)=b(i,j)。 a(j,i)=b(i,j)。 end end end for (i=2:n) p(i)=inf。s(i)=i。 end for (k=1:n) pd=1。 for (i=2:n) for (j=1:n) if (p(i)p(j)+a(j,i)) p(i)=p(j)+a(j,i)。s(i)=j。pd=0。 end end end if (pd) break。 end end if (p(n)==inf) break。 end dvt=inf。t=n。 while (1) if (a(s(t),t)0) dvtt=C(s(t),t)f(s(t),t)。 elseif (a(s(t),t)0) dvtt=f(t,s(t))。 end if (dvtdvtt) dvt=dvtt。 end if (s(t)==1) break。 end t=s(t)。 end pd=0。 if (wf+dvt=wf0) dvt=wf0wf。pd=1。 end t=n。 while (1) if (a(s(t),t)0) f(s(t),t)=f(s(t),t)+dvt。 elseif (a(s(t),t)0) f((t),s(t))=f(t,s(t))dvt。 end if (s(t)==1) break。 end t=s(t)。 end if (pd) break。 end wf=0。 for (j=1:n) wf=wf+f(1,j)。 endendzwf=0。for (i=1:n) for (j=1:n) zwf=zwf+b(i,j)*f(i,j)。 endendf。