繁体   English   中英

具有深度优先搜索的Ford-Fulkerson算法

[英]Ford-Fulkerson algorithm with depth first search

我正在做一个实施福特-富克森算法的作业,他们说我们应该使用DFS进行路径查找,但是我被困在某个地方。 我没有发布代码,因为它本地化太多了。 实际上,我的DFS算法效果很好,但是死胡同会导致问题,例如,如果我运行代码,则会得到DFS这样的输出

0 => 1 1 => 2 1 => 3 3 => 5

它从0开始,以5结尾,但是1 => 2部分对于我的算法来说不是必需的,我也使用[N] [2]矩阵存储路径。 我的问题是如何删除结果矩阵中的死角(也许在DFS递归内?)

您应该执行DFS,以找到源和接收器之间的某些路径。 然后,当dfs重新调整时,您应该添加一个流

这是一个例子。 函数“发送”是一个DFS。 请注意,我将在搜索过程中找到的最小容量值与DFS一起传递:

https://github.com/juanplopes/icpc/blob/master/uva/820.cpp

int send(int s, int t, int minn) {
    V[s] = true;

    if (s==t) return minn;

    for(int i=1; i<=n; i++) {
        int capacity = G[s][i]-F[s][i];
        if (!V[i] && capacity > 0) {
            if (int sent = send(i, t, min(minn, capacity))) {
                F[s][i] += sent;
                F[i][s] -= sent;
                return sent;
            }
        }
    }

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM