Python到Java的翻译

时间:2010-05-13 10:59:16

标签: java python

我在python中获得了很短的算法代码,但我需要将其转换为Java。我没有找到任何程序来做到这一点,所以我真的很感激帮助翻译它。

我很少了解python,知道算法是如何工作的。

最大的问题是因为在python中所有的东西都是对象,有些东西真的非常混乱,如

sum(self.flow[(source, vertex)] for vertex, capacity in self.get_edges(source))

和“self.adj”就像具有多个值的hashmap,我不知道如何将所有值放在一起。这个代码在java中有更好的集合吗?

代码是:

class FlowNetwork(object):
    def __init__(self):
        self.adj, self.flow, = {},{}

    def add_vertex(self, vertex):
        self.adj[vertex] = []

    def get_edges(self, v):
        return self.adj[v]

    def add_edge(self, u,v,w=0):
        self.adj[u].append((v,w))
        self.adj[v].append((u,0))
        self.flow[(u,v)] = self.flow[(v,u)] = 0

    def find_path(self, source, sink, path):
        if source == sink:
            return path
        for vertex, capacity in self.get_edges(source):
            residual = capacity - self.flow[(source,vertex)]
            edge = (source,vertex,residual)
            if residual > 0 and not edge in path:
                result = self.find_path(vertex, sink, path + [edge])
                if result != None:
                    return result

    def max_flow(self, source, sink):
        path = self.find_path(source, sink, [])
        while path != None:
            flow = min(r for u,v,r in path)
            for u,v,_ in path:
                self.flow[(u,v)] += flow
                self.flow[(v,u)] -= flow
                path = self.find_path(source, sink, [])
        return sum(self.flow[(source, vertex)] for vertex, capacity in self.get_edges(source))
g = FlowNetwork()
map(g.add_vertex, ['s','o','p','q','r','t'])
g.add_edge('s','o',3)
g.add_edge('s','p',3)
g.add_edge('o','p',2)
g.add_edge('o','q',3)
g.add_edge('p','r',2)
g.add_edge('r','t',3)
g.add_edge('q','r',4)
g.add_edge('q','t',2)
print g.max_flow('s','t')

这个例子的结果是“5”。

算法从源顶点“s”到目标“t”找到图形(链表或其他)中的最大流量。

非常感谢任何想法

1 个答案:

答案 0 :(得分:2)

Java没有像Python的理解语法那样的东西。您必须将其替换为循环遍历列表的代码,并将sum的值聚合在一起。

此外,self.flow看起来像是由对索引的字典。匹配此AFAIK的唯一方法是创建一个包含两个字段的类,这两个字段实现hashCodeequals以用作HashMap的键。