나는 파이썬에서 알고리즘의 코드가 매우 짧다.하지만 자바로 변환해야한다. 나는 그 일을 할 수있는 프로그램을 찾지 못했기 때문에 그것을 번역하는 데 정말로 감사 할 것입니다.파이썬에서 자바로 번역
저는 알고리즘 작업이 어떻게되는지 아이디어를 알기 위해 파이썬을 조금 배웠습니다. 파이썬의 모든 객체이고 몇 가지 아주
sum(self.flow[(source, vertex)] for vertex, capacity in self.get_edges(source))
과 같은 confuzing 정말 만들어지기 때문에
가장 큰 문제는 "self.adj은"내가 어떻게 넣어하는 아무 생각이 여러 값을 갖는 해시 맵처럼 모두 함께. 자바 에서이 코드에 대한 더 나은 컬렉션인가요?
코드 :이 예의
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"까지 그래프 (링크 된 목록 또는 기타)의 최대 흐름을 찾습니다.
많은 아이디어에 감사드립니다.
이 숙제가 있습니까? –
.class 파일을 생성하는 데 항상 jython (http://www.jython.org)이 있습니다. (실제로 .class 파일을 .java 파일로 디 컴파일하는 데 http://www.google.com/search?q=java+decompiler가 필요한 경우) – mawimawi