Я не нашел специального алгоритма в Networkx
для этой цели.Вы можете использовать следующую функцию, которая использует алгоритм Беллмана-Форда:
import networkx as nx
G = nx.DiGraph()
G.add_weighted_edges_from([(1, 2, -50), (2, 3, 40), (3, 4, -50),
(4, 5, -90), (1, 6, -105)])
def func(graph, source, target, start_weight):
total = start_weight
path = []
p = nx.bellman_ford_path(graph, source, target)
for u, v in zip(p, p[1:]):
total += G[u][v]['weight']
path.append(u)
if total < 0:
return path
else:
return path
print(func(G, 1, 5, 100))
# [1, 2, 3, 4]
print(func(G, 1, 6, 100))
# [1]