python - 在 Python 中为 edmonds karp 最大流量算法创建容量图

标签 python algorithm data-structures max-flow edmonds-karp

在深入探讨这个问题之前,先了解一下我已有的一些背景信息:

-我首先创建了一个基于美国各城市的无向邻接矩阵图,边权重为计算的距离(通过距离公式实现)。

-我还使用 prim 算法实现了最小生成树。

现在我需要实现我拥有的 Edmonds Karp 最大流量算法,但我对如何根据我拥有的数据创建容量图以实现以下代码中使用的算法感到困惑:

def edmonds_karp(C, source, sink):
    n = len(C) # C is the capacity matrix
    F = [[0] * n for i in xrange(n)]
    # residual capacity from u to v is C[u][v] - F[u][v]

    while True:
        path = bfs(C, F, source, sink)
        if not path:
            break
        # traverse path to find smallest capacity
        flow = min(C[u][v] - F[u][v] for u,v in path)
        # traverse path to update flow
        for u,v in path:
            F[u][v] += flow
            F[v][u] -= flow
    return sum(F[source][i] for i in xrange(n))

def bfs(C, F, source, sink):
    queue = [source]                 
    paths = {source: []}
    while queue:
        u = queue.pop(0)
        for v in xrange(len(C)):
            if C[u][v] - F[u][v] > 0 and v not in paths:
                paths[v] = paths[u] + [(u,v)]
                if v == sink:
                    return paths[v]
                queue.append(v)
    return None

任何帮助将不胜感激,谢谢!

最佳答案

Edmonds-Karp 算法所需要做的就是将所有边的权重更改为 1,因为在这个问题中不需要它们来找到城市之间的边连通性。边权重为 1 的城市图将成为我的容量图。同样对于 Edmonds-Karp 算法将需要有一个有向图。

关于python - 在 Python 中为 edmonds karp 最大流量算法创建容量图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13677136/

相关文章:

algorithm - 有没有时间复杂度O(lg * n)(迭代对数函数)的算法?

data-structures - ECS中如何处理动态分层实体

javascript - 基于多个键值对搜索对象数组的优化方法

python - 如何正确地将 Python 脚本输出重定向到文件?

python - Virtualenv 外壳错误

python - 如何在 Python 中将单个字符转换为其十六进制 ASCII 值?

algorithm - Sets 和 hashmaps 没有固定的查找时间?

python - 在 pyparsing 中嵌套分隔列表而不会导致无限递归?

java - 这是一个无限循环吗?我究竟做错了什么? (Java 方法)

algorithm - 后序图遍历?