Matlab最大流最小割!!!求代码解释

Kk_1026 2019-06-19 12:45:16
function [f,s]=maxflow(startp,endp,c) n=length(c); f=zeros(size(c)); l=zeros(1,n);d=zeros(1,n);examine=zeros(1,n); l(startp)=0.5;d(startp)=inf; while 1 ifexam=0;ifl=0; for i=1:n if l(i)~=0 ifl=ifl+1; if examine(i)==1 ifexam=ifexam+1; end end end if ifl==ifexam break; end for i=1:n if l(i)~=0&examine(i)==0 break; end end for j=1:n if c(i,j)~=0 if f(i,j)<c(i,j)&l(j)==0 l(j)=i; d(j)=min(d(i),c(i,j)-f(i,j)); end end if c(j,i)~=0 if f(j,i)>0&l(j)==0 l(j)=-i; d(j)=min(d(i),f(i,j)); end end end examine(i)=1; if l(endp)~=0 j=endp; while 1 if l(j)~=0.5 if l(j)>0 i=l(j); f(i,j)=f(i,j)+d(endp); j=i; end if l(j)<0 i=-l(j); f(j,i)=f(j,i)-d(endp); j=i; end else l=zeros(1,n);break; end end l(startp)=0.5;d(startp)=inf;examine=zeros(1,n); end end s=[];ns=0; for i=1:n if l(i)~=0 ns=ns+1; s(ns)=i; end end fprintf('f为最大可行流\n'); fprintf('图的最小截划分得到的一个子集s为:\n'); disp(s);
...全文
137 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,451

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计/Flash/Silverlight 开发 图象工具使用
社区管理员
  • 图象工具使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧