У меня есть списки начальных и узлов и расстояния между ними, которые я ввожу в networkx следующим образом:
import networkx as nx
s, t = [], [] # int lists assuming long lists of starting and ending nodes forming a meshed network
d = [] # float list of distance between each starting and ending node
G = nx.Graph()
for i, j, k in zip(s,t,d):
G.add_edge(s,t, weight=d)
c - это список, который является подмножеством G.nodes (), я хочу найти минимальное остовное дерево только для узлов c, но с учетом веса и топологии сети. Поэтому я начал с поиска кратчайшего пути следующим образом:
for i in range(len(c)):
for j in range(len(c)):
for i != j
path.append(nx.dijkstra_path(G, source=c[i], target=c[j])
или:
path.append (nx.shortest_path (G, source = c [i], target = c [j])
Исходя из этого, я бы взял длину кратчайших путей, чтобы получить упрощенный граф только между узлами c, но с кратчайшими длинами пути в качестве весов между узлами c, а затем я нашел бы минимальное остовное дерево этого упрощенного графа.
Однако, когда я пробую dijkstra, я получаю ошибку
TypeError: unsupported operand type(s) for +: 'int' and 'list'
Когда я пытаюсь указать кратчайший путь, я не получаю веса
Есть мысли о поиске взвешенного кратчайшего пути?
В целом, существует ли лучшая стратегия для нахождения взвешенного минимального остовного дерева nbunch узлов в графике?
Любая помощь приветствуется!