- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
求解最大流问题的matlab程序
求解最大流问题的matlab程序
最大流算法
算法思想:最大流问题实际上是求一可行流{fij},使得v(f达到最大。若给了一个可行流f,只要判断N中有无关于f的增广路径,如果有增广路径,改进f, 得到一个流量增大的新的可行流;如果没有增广路径,则得到最大流。
1.寻求最大流的标号法(Ford,Fulkerson)
从一个可行流(一般取零流)开始,不断进行以下的标号过程与调整过程,直到找不到关于f的可增广路径为止。
(1)标号过程
在这个过程中,网络中的点分为已标号点和未标号点,已标号点又分为已检查和未检查两种。每个标号点的标号信息表示两个 部分:第一标号表明它的标号从哪一点得到的,以便从vt开始反向追踪找出也增广路径;第二标号是为了表示该顶点是否已检查过。
标号开始时,给vs标上(s,0),这时vs是标号但末检查的点,其余都是未标号的点,记为(0,0)。
取一个标号而未检查的点vi,对于一切未标号的点vj:
A.对于弧(vi,vj),若fijcij,则给vj标号(vi,0),这时,vj点成为标号而未检查的点。
B.对于弧(vi,vj),若fji0,则给vj标号(-vi,0),这时,vj点成为标号而未检查的点。
于是vi成为标号且已检查的点,将它的第二个标号记为1。重复上述步骤,一旦vt被标上号,表明得到一条从vi到vt的增广路径p,转入调整过程。
若所有标号都已检查过去,而标号过程进行不下去时,则算法结束,这时的可行流就是最大流。
(2)调整过程
从vt点开始,通过每个点的第一个标号,反向追踪,可找出增广路径P。例如设vt的第一标号为vk(或-vk),则弧(vk,vt)(或 相应地(vt,vk))是p上弧。接下来检查vk的第一标号,若为vi(或-vi),则找到(vi,vk)(或相应地(vk,vi))。再检查vi的第一 标号,依此类推,直到vs为止。这时整个增广路径就找到了。在上述找增广路径的同时计算Q:
Q=min{min(cij-fij),minf*ij}
对流f进行如下的修改:
fij = fij+Q (vi,vj)∈ P的前向弧的集合
fij = fij-Q (vi,vj)∈ P的后向弧的集合
fij = f*ij (vi,vj)不属于P的集合
接着,清除所有标号,对新的可行流f’,重新进入标号过程。
求解最大流问题的matlab程序.(2007-05-22 19:41:06)转载标签: 最大流问题matlab
调用方式:需要将图抽象成矩阵,抽象方法:(i,j,c,f) i---箭尾点,j---箭头点,c---v(i,j)的容量,f---v(i,j)的流量.
主程序
function R=maxliu(R)
while(1)
VV=zengguang(R);
if VV==inf return ;end
R(VV(:,1),4)=R(VV(:,1),4)+VV(:,2)*min(VV(:,3));
end
外部函数1,求图R的增广矩阵
function VV=zengguang(R) %求最短的增广链,要求标号,起点为1,终点为最大
k=size(R,1);
n=max(R(:,2));
B=R(:,1:2);
for i=1:k;
A(i,1)=R(i,3)-R(i,4);
if R(i,1)~=1R(i,2)~=n;
A(i,2)=R(i,4);
else
A(i,2)=0;
end
end
r=1;
for i=1:n
for j=1:k
if (A(j,1)~=0)(B(j,1)==i)
V(r,:)=[i,B(j,2)];
r=r+1;
end
if (A(j,2)~=0)(B(j,2)==i)
V(r,:)=[i,B(j,1)];
r=r+1;
end
end
end
P=zeros(n,n);
for i=1:size(V,1)
P(V(i,1),V(i,2))=1;
end
Q=dijkstra(P,1,n);
if Q==inf VV=inf; return; end
for i=1:length(Q)-1,
PP=[Q(1,i),Q(1,i+1)];
r1=find(B(:,1)==PP(1,1)
您可能关注的文档
- 李贞贤资料.doc
- 李芳仪.doc
- 李践人生蓝图.doc
- 李连杰经典语录汇总.doc
- 材料、人工费用.doc
- 材料分解与材耗统计su_zyj.doc
- 材料作文十题及指导.doc
- 材料单选题.doc
- 材料的实际运用 讲义.doc
- 材料题2.doc
- 实验室危废随意倾倒查处规范.ppt
- 实验室危废废液处理设施规范.ppt
- 实验室危废处置应急管理规范.ppt
- 初中地理中考总复习精品教学课件课堂讲本 基础梳理篇 主题10 中国的地理差异 第20课时 中国的地理差异.ppt
- 初中地理中考总复习精品教学课件课堂讲本 基础梳理篇 主题10 中国的地理差异 第21课时 北方地区.ppt
- 危险废物处置人员防护培训办法.ppt
- 危险废物处置隐患排查技术指南.ppt
- 2026部编版小学数学二年级下册期末综合学业能力测试试卷(3套含答案解析).docx
- 危险废物处置违法案例分析汇编.ppt
- 2026部编版小学数学一年级下册期末综合学业能力测试试卷3套精选(含答案解析).docx
原创力文档


文档评论(0)