Используя ваш пример:
Исходная сеть за вычетом "штрафа при ходьбе":
G = nx.Graph()
G.add_nodes_from(['A', 'B', 'C', 'D', 'E', 'F'])
G.add_edges_from([('A', 'B', {'walk': 3, 'time': 3}), ('A', 'C', {'metro': 4, 'time': 4}), ('A', 'D', {'walk': 3, 'time': 3}),
('C', 'E', {'walk': 3, 'time': 3}), ('D', 'E', {'walk': 3, 'time': 3}), ('B', 'F', {'walk': 3, 'time': 3}),
('D', 'F', {'metro': 4, 'time': 4}), ('E', 'F', {'walk': 3, 'time': 3})])
#nx.draw(G, with_labels=True, font_color='white')
nx.shortest_path(G, 'A', 'F', weight='time')
Вывод:
['A', 'B', 'F']
Теперь давайте оштрафуем время прохождения края путем умножения 10x:
G = nx.Graph()
G.add_nodes_from(['A', 'B', 'C', 'D', 'E', 'F'])
G.add_edges_from([('A', 'B', {'walk': 3, 'time': 30}), ('A', 'C', {'metro': 4, 'time': 4}), ('A', 'D', {'walk': 3, 'time': 30}),
('C', 'E', {'walk': 3, 'time': 30}), ('D', 'E', {'walk': 3, 'time': 30}), ('B', 'F', {'walk': 3, 'time': 30}),
('D', 'F', {'metro': 4, 'time': 4}), ('E', 'F', {'walk': 3, 'time': 30})])
#nx.draw(G, with_labels=True, font_color='white')
nx.shortest_path(G, 'A', 'F', weight='time')
Вывод:
['A', 'D', 'F']
Можете ли вы привести пример, где это не сработает, если вы достаточно оштрафуете свои "ходовые" края?