matlab实现基于DFS的Ford_Fulkerson最大流最小割算法

该博客介绍了如何使用MATLAB实现基于深度优先搜索(DFS)的Ford-Fulkerson最大流最小割算法。通过构建残差网络并进行DFS搜索找到增广路径,逐步更新流量,直至找不到增广路径为止,达到求解最大流的目的。
摘要由CSDN通过智能技术生成
function [F, maxf, V, S] = Ford_Fulkerson(C, src, sink)


n = size(C, 1);

F = zeros(n);
maxf = 0;
V = [];
S = [];

while true
    % in: ResNet.
    ResNet = C - F + F';   % residual network.
    % out: pre, Df
    pre = ones(1, n) * NaN;
    Df = ones(1, n) * inf;
    % DFS to find augmenting path.
    stk = [ src ];
    unvisited = setdiff(1:n, src);
    while ~isempty(stk)
        if stk(1) == sink
            break;
        end
            % pop
        from = stk(1);
        stk(1) = [];
        
            % fot v in adj(u)
        [~, to] = find(ResNet(from, unvisited) > 0);
        tovisit = unvisited(unique(to));
            % visit
        pre(tovisit) = from;
        Df(tovisit) = min(Df(from), ResNet(from, tovisit));
        
            % push
        stk = [tovisit, stk];
        unvisited = setdiff(unvisited, tovisit);
    end
    % DFS end.
 
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值