我在python中得到了很短的算法代碼,但是我需要將它翻譯成Java。我沒有找到任何程序來做到這一點,所以我會很感激幫助翻譯它。Python到Java翻譯
我學會了python,知道算法是如何工作的。
最大的問題是,因爲所有的Python是對象,有些事情是由很喜歡
sum(self.flow[(source, vertex)] for vertex, capacity in self.get_edges(source))
,非常confuzing「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」查找圖中的最大流量(鏈表或其他)。
非常感謝任何想法
這功課嗎? – 2010-05-13 11:03:37
總是有jython(http://www.jython.org)來創建一個.class文件。 (如果真的有必要http://www.google.com/search?q=java+decompiler反編譯成.java文件。) – mawimawi 2010-05-13 19:37:21