不相交路径算法

Disjoint Paths Algorithm

计算增广路径最简单的方法是什么?

使用标记遍历计算边不相交的路径以查找增广路径

def paths(G, s, t):                           # Edge-disjoint path coun
    H, M, count = tr(G), set(), 0             # Transpose, matching, result
    while True:                               # Until the function returns
        Q, P = {s}, {}                              # Traversal queue + tree
        while Q:                                    # Discovered, unvisited
            u = Q.pop()                             # Get one
            if u == t:                              # Augmenting path!
                count += 1                     # That means one more path
                break                               # End the traversal
            forw = (v for v in G[u] if (u,v) not in M)  # Possible new edges
            back = (v for v in H[u] if (v,u) in M)  # Cancellations
            for v in chain(forw, back):       # Along out- and in-edges
                if v in P: continue           # Already visited? Ignore
                P[v] = u                            # Traversal predecessor
                Q.add(v)                            # New node discovered
        else:                                       # Didn't reach t?
            return count                            # We're donefinnish

我可以使用 while 循环来学习芬兰语吗?

我试过了,成功了!

while u != s:    
    u, v = P[u], u
    if v in G[u]:
        M.add((u,v))
else:
    M.remove((v,u))