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

在Python中为edmonds-karp最大流算法创建容量图,python,algorithm,data-structures,max-flow,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] *

在我开始讨论这个问题之前,这里是我已经掌握的一些背景信息:

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

-我还使用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算法,需要有一个有向图。

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