Взвешенное минимальное связующее дерево nbunch of Graph в сети x - PullRequest
0 голосов
/ 03 июля 2018

У меня есть списки начальных и узлов и расстояния между ними, которые я ввожу в 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 узлов в графике?

Любая помощь приветствуется!

...