1、n=8;A=0 2 8 1 inf inf inf inf2 0 6 inf 1 inf inf inf8 6 0 7 5 1 2 inf1 inf 7 0 inf inf 9 infinf 1 5 inf 0 3 inf 8inf inf 1 inf 3 0 4 6inf inf 2 9 inf 4 0 3inf inf inf inf 8 6 3 0;%MATLAB 中,inf 表示无穷大D=A %赋初值,并且显示出来for(i=1:n)for(j=1:n)R(i,j)=j;end;end %赋路径初值for(k=1:n)for(i=1:n)for(j=1:n)if(D(i,k)+D(k,
2、j)0)x(k)=A(i,j); %数组 x 记录 A 中不同的正数kk=1; %临时变量for(s=1:k-1) %排除相同的正数if(x(k)=x(s)kk=0;break;end;endk=k+kk;end;end;endk=k-1; %显示 A 中所有不同正数的个数for(i=1:k-1) %将 x 中不同的正数从小到大排序for(j=i+1:k)if(x(j)0)kk=kk+1;zz=z;end;end %寻找 TT 中的树枝if(kk=1)TT(y,zz)=0;TT(zz,y)=0;pd=0;end;end %砍掉 TT 中的树枝if(pd)break;end;end %已砍掉 T
3、T 中所有的树枝pd=0; %判断 TT 中是否有圈for(y=1:n-1)for(z=y+1:n)if(TT(y,z)0)pd=1;break;end;end;endif(pd)T(i,j)=0;T(j,i)=0; %假如 TT 中有圈elseq=q+1;end;end;end;end;endT %显示近似最小生成树 T,程序结束输出结果:T =0 2 0 1 0 0 0 02 0 0 0 1 0 0 00 0 0 0 0 1 2 01 0 0 0 0 0 0 00 1 0 0 0 3 0 00 0 1 0 3 0 0 00 0 2 0 0 0 0 30 0 0 0 0 0 3 0匈牙利算法
4、 MATLAB 程序:m=5;n=5;A=0 1 1 0 01 1 0 1 1 0 1 1 0 00 1 1 0 00 0 0 1 1;M(m,n)=0;for(i=1:m)for(j=1:n)if(A(i,j)M(i,j)=1;break;end;endif(M(i,j)break;end;endwhile(1)for(i=1:m)x(i)=0;endfor(i=1:n)y(i)=0;endfor(i=1:m)pd=1;for(j=1:n)if(M(i,j)pd=0;end;endif(pd)x(i)=-n-1;end;endpd=0;while(1)xi=0;for(i=1:m)if(x(
5、i)1)k=k-1;for(j=1:k)pdd=1;for(i=1:m)if(M(i,yy(j)x(i)=-yy(j);pdd=0;break;end;endif(pdd)break;end;endif(pdd)k=1;j=yy(j);while(1)P(k,2)=j;P(k,1)=y(j);j=abs(x(y(j);if(j=n+1)break;endk=k+1;endfor(i=1:k)if(M(P(i,1),P(i,2)M(P(i,1),P(i,2)=0;elseM(P(i,1),P(i,2)=1;end;endbreak;end;end;endif(pd)break;end;endM输
6、出结果:M =0 1 0 0 01 0 0 0 00 0 1 0 00 0 0 0 00 0 0 1 0用 Ford-fulkerson 求最大流的算法程序 en=8;C=0 5 4 3 0 0 0 00 0 0 0 5 3 0 00 0 0 0 0 3 2 00 0 0 0 0 0 2 00 0 0 0 0 0 0 40 0 0 0 0 0 0 30 0 0 0 0 0 0 50 0 0 0 0 0 0 0;for(i=1:n)for(j=1:n)f(i,j)=0;end;endfor(i=1:n)No(i)=0;d(i)=0;endwhile(1)No(1)=n+1;d(1)=inf;wh
7、ile(1)pd=1;for(i=1:n)if(No(i)for(j=1:n)if(No(j)=0end;elseif(No(j)=0d(j)=f(j,i);pd=0;if(d(j)d(i)d(j)=d(i);end;end;end;end;end;endif(No(n)|pd)break;end;end;if(pd)break;enddvt=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;end;if(No(t)=1)for(i=1:n)No(i)
8、=0;d(i)=0;end;break;end;t=No(t);end;end;wf=0;for(j=1:n)wf=wf+f(1,j);end;fwfNo输出结果f =0 5 4 2 0 0 0 00 0 0 0 4 1 0 00 0 0 0 0 2 2 00 0 0 0 0 0 2 00 0 0 0 0 0 0 40 0 0 0 0 0 0 30 0 0 0 0 0 0 40 0 0 0 0 0 0 0wf =11No =9 0 0 1 0 0 0 0最小费用最大流算法程序n=5;C=0 15 16 0 00 0 0 13 140 11 0 17 00 0 0 0 80 0 0 0 0;b=
9、0 4 1 0 00 0 0 6 10 2 0 3 00 0 0 0 2 0 0 0 0 0;wf=0;wf0=inf;for(i=1:n)for(j=1:n)f(i,j)=0;end;endwhile(1)for(i=1:n)for(j=1:n)if(j=i)a(i,j)=inf;end;end;endfor(i=1:n)for(j=1:n)if(C(i,j)0else if(C(i,j)0else if(C(i,j)0)a(i,j)=b(i,j);a(j,i)=-b(i,j);end;end;end;end;endfor(i=2:n)p(i)=inf;s(i)=i;endfor(k=1:n
10、)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;endif(pd)break;end;endif(p(n)=inf)break;enddvt=inf;t=n;while(1)if(a(s(t),t)0)dvtt=C(s(t),t)-f(s(t),t);else if(a(s(t),t)dvtt)dvt=dvtt;endif(s(t)=1)break;endt=s(t);endpd=0;if(wf+dvt=wf0)dvt=wf0-wf;pd=1;endt=n;while(1)if(a(s(t),t)0)f(s(t),t)=f(s(t),t)+dvt;else if(a(s(t),t)0)f(t,s(t)=f(t,s(t)-dvt;end;endif(s(t)=1)break;endt=s(t);endif(pd)break;endwf=0;for(j=1:n)wf=wf+f(1,j);end;endzwf=0;for(i=1:n)for(j=1:n)zwf=zwf+b(i,j)*f(i,j);end;endfwfzwf输出结果:f =0 6 16 0 00 0 0 0 140 8 0 8 00 0 0 0 80 0 0 0 0wf =22zwf =110