이 작동 할 수 있습니다
import networkx as nx
G = nx.Graph()
# create the graph
G.add_edge(1, 2, weight=2)
G.add_edge(1, 4, weight=5)
G.add_edge(2, 3, weight=14)
G.add_edge(2, 4, weight=5)
G.add_edge(2, 5, weight=4)
G.add_edge(3, 5, weight=34)
G.add_edge(4, 5, weight=58)
start = 1 # start node
end = 4 # end node
all_paths = [path for path in nx.all_simple_paths(G, start, end)]
# initialize result
largest_path = None
largest_path_weight = None
# iterate through all paths to find the largest
for p in all_paths: # keep track of each path
for _ in range(len(p)): # for each node in this path
pairs = zip(p, p[1:]) # get sequence of nodes
product = 1 # reset product for this paths calculation
for pair in pairs: # for each pair of nodes in this path
an_edge = G.get_edge_data(pair[0], pair[1]) # get this edge's data
product *= an_edge['weight'] # multiply all weights
if product > largest_path_weight: # check if this path's product is greater
largest_path = p # if True, set largest to this path
largest_path_weight = product # save the weight of this path
# display result
print 'largest path:', largest_path
print 'weight:', largest_path_weight
을이 예를 들어 :
largest path: [1, 2, 3, 5, 4]
weight: 55216
는 모든 무게> (1)을 보장인가? – Joel
이것은 숙제 문제가 될 수있는 것처럼 보입니다 ... 완전한 응답보다는 힌트 일뿐입니다 - f (ab) = f (a) + f (b)를 만족시키는 연산은 무엇입니까? 일단 당신이 그것을 고려했다면, 최소 합계로 경로를 찾는 networkx 알고리즘을 사용할 수 있습니까? – Joel
조엘 감사합니다! 그것은 로그 기능입니다. 그리고 구현하려고하는 것이지만 프로그래밍에 대해 많이 알지 못합니다. – pokatore