Networkx - наименьшая длина пути - PullRequest
8 голосов
/ 24 февраля 2012

Я использую networkx для управления большим сетевым графом, который состоит из 50 тыс. Узлов.

Я хочу вычислить кратчайшую длину пути между определенным набором узлов, скажем, N.
Для этого я использую функцию nx.shortest_path_length.

В некоторых узлах из N может отсутствовать путь, поэтому networkx вызывает и останавливает мою программу.

Есть ли способ запустить эту программу без ошибок?
И сказать shortest_path_length вернуть какое-то максимальное значение?

Код просто использует nx.shortest_path_length(G,i,j) в цикле. и ошибка следующая

raise nx.NetworkXNoPath("No path between %s and %s." % (source, target)) networkx.exception.NetworkXNoPath: No path between V and J

Ответы [ 2 ]

14 голосов
/ 24 февраля 2012
import networkx as nx
G=nx.Graph()
G.add_nodes_from([1,2,3,4])
G.add_edge(1,2)
G.add_edge(3,4)
try:
    n=nx.shortest_path_length(G,1,4)
    print n
except nx.NetworkXNoPath:
    print 'No path'
0 голосов
/ 25 мая 2019

В качестве альтернативы, в зависимости от типа графа, а именно: направленный , сильно или слабо связанный или ненаправленный - создать компонентные подграфы (sub_G), то есть

(G.subgraph(c) for c in connected_components(G))

или если направлено:

nx.weakly_connected_component_subgraphs(G) или nx.strongly_connected_component_subgraphs(G)

Кроме того, данный sub_G является ориентированным графомпроверьте прочность соединений, например,

nx.is_strongly_connected(sub_G) или ng.is_weakly_connected(sub_G)

В сочетании или по отдельности эти рекомендации уменьшат ненужную проверку путей, которые не существуют из-за характерасоставляющих подграфа (ов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...