我使用了线程Call Python function from MATLAB并在Matlab中成功实现了它 .

但是,python中的以下代码反映了Matlab中没有输出,并且由于我对Python不熟悉,我无法看到问题可能源于何处!

所以这里是python代码,它将图形作为输入,如:

bipartiteMatch({0:[0,1,3],1:[3,4],2:[1,2,4],3:[2,3,4],4:[0,2,3]})

并给出上面表格中的最大匹配集,

# Hopcroft-Karp bipartite max-cardinality matching and max independent set
# David Eppstein, UC Irvine, 27 Apr 2002
#import sys
def bipartiteMatch(graph):
'''Find maximum cardinality matching of a bipartite graph (U,V,E).
The input format is a dictionary mapping members of U to a list
of their neighbors in V.  The output is a triple (M,A,B) where M is a
dictionary mapping members of V to their matches in U, A is the part
of the maximum independent set in U, and B is the part of the MIS in V.
The same object may occur in both U and V, and is treated as two
distinct vertices if this happens.'''

# initialize greedy matching (redundant, but faster than full search)
matching = {}
for u in graph:
    for v in graph[u]:
        if v not in matching:
            matching[v] = u
            break

while 1:
    # structure residual graph into layers
    # pred[u] gives the neighbor in the previous layer for u in U
    # preds[v] gives a list of neighbors in the previous layer for v in V
    # unmatched gives a list of unmatched vertices in final layer of V,
    # and is also used as a flag value for pred[u] when u is in the first       layer
    preds = {}
    unmatched = []
    pred = dict([(u,unmatched) for u in graph])
    for v in matching:
        del pred[matching[v]]
    layer = list(pred)

    # repeatedly extend layering structure by another pair of layers
    while layer and not unmatched:
        newLayer = {}
        for u in layer:
            for v in graph[u]:
                if v not in preds:
                    newLayer.setdefault(v,[]).append(u)
        layer = []
        for v in newLayer:
            preds[v] = newLayer[v]
            if v in matching:
                layer.append(matching[v])
                pred[matching[v]] = v
            else:
                unmatched.append(v)

    # did we finish layering without finding any alternating paths?
    if not unmatched:
        unlayered = {}
        for u in graph:
            for v in graph[u]:
                if v not in preds:
                    unlayered[v] = None
        return (matching,list(pred),list(unlayered))

    # recursively search backward through layers to find alternating paths
    # recursion returns true if found path, false otherwise
    def recurse(v):
        if v in preds:
            L = preds[v]
            del preds[v]
            for u in L:
                if u in pred:
                    pu = pred[u]
                    del pred[u]
                    if pu is unmatched or recurse(pu):
                        matching[v] = u
                        return 1
        return 0

    for v in unmatched: recurse(v)

我可以看到输出并成功运行python中的代码,但输出未在Matlab中显示并返回 " " 作为答案 .

所以任何形式的帮助都非常感谢!