数学建模——matlab最大流问题

本文展示了一段使用MATLAB进行图算法实现的代码示例,通过定义节点间的连接和流量,逐步调整流量直至达到最大流状态,适用于理解图算法和最大流原理。

代码:

clc,clear 
u(1,2)=18;u(1,3)=19;u(1,4)=18;u(2,5)=18;u(2,7)=18; 
u(3,5)=19;u(3,6)=19;u(3,8)=19;u(4,6)=18;u(4,7)=18;
u(5,9)=10;u(6,9)=20;u(7,9)=15;u(8,9)=10;
f(1,2)=0;f(1,3)=0;f(1,4)=0;f(2,5)=0;f(2,7)=0; 
f(3,5)=0;f(3,6)=0;f(3,8)=0;f(4,6)=0;f(4,7)=0;
f(5,9)=0;f(6,9)=0;f(7,9)=0;f(8,9)=0;
n=length(u);list=[];maxf(n)=1; 
while maxf(n)>0 
 maxf=zeros(1,n);pred=zeros(1,n); 
 list=1;record=list;maxf(1)=inf; 
 %list是未检查邻接点的标号点,record是已标号点
 while (~isempty(list))&(maxf(n)==0) 
 flag=list(1);list(1)=[]; 
 label1= find(u(flag,:)-f(flag,:)); 
 label1=setdiff(label1,record); 
 list=union(list,label1); 
 pred(label1)=flag; 
 maxf(label1)=min(maxf(flag),u(flag,label1)... 
 -f(flag,label1)); 
 record=union(record,label1); 
 label2=find(f(:,flag)); 
 label2=label2'; 
 label2=setdiff(label2,record); 
 list=union(list,label2); 
 pred(label2)=-flag; 
 maxf(label2)=min(maxf(flag),f(label2,flag)); 
 record=union(record,label2); 
 end 
 if maxf(n)>0 
 v2=n; v1=pred(v2); 
 while v2~=1 
 if v1>0 
 f(v1,v2)=f(v1,v2)+maxf(n); 
 else 
 v1=abs(v1); 
 f(v2,v1)=f(v2,v1)-maxf(n); 
 end 
 v2=v1; v1=pred(v2); 
 end 
 end 
end 
f

少年不被楼层误,余生不羁尽自由。
加油,加油!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值