Networkx - наименьшая длина пути

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

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

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

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

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

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


person username_4567    schedule 24.02.2012    source источник
comment
и остановить мою программу? Вы имеете в виду, что это вызывает исключение? Вы просите помощи с утверждением try:? Можете ли вы опубликовать код и фактическое сообщение об ошибке, которое вы действительно получаете?   -  person S.Lott    schedule 24.02.2012
comment
Да, это вызывает исключение и возникает ошибка времени выполнения, поэтому он выводит сообщение об исключении на выходе и даже не обрабатывает другие узлы в итерации.   -  person username_4567    schedule 24.02.2012
comment
Комментарий не помогает. Фактически обновите вопрос, указав код и детали исключения. И - если вы не знакомы с оператором try, найдите учебное пособие и задайте конкретные вопросы об операторе try после выполнения учебного пособия.   -  person S.Lott    schedule 24.02.2012
comment
Пожалуйста. Фактически обновите вопрос, указав код и детали исключения. Комментарии трудно читать.   -  person S.Lott    schedule 24.02.2012
comment
docs.python.org/tutorial/errors.html#handling-exceptions   -  person Thomas K    schedule 24.02.2012
comment
@ThomasK отобразит правильное сообщение об ошибке, но я хочу, чтобы networkx возвращал какое-то большое значение, если нет пути.   -  person username_4567    schedule 24.02.2012
comment
networkx не вернет его, но вместо этого вы можете установить для переменной большое число в предложении except.   -  person Thomas K    schedule 24.02.2012
comment
вы можете использовать has_path(G, source, target) функцию. дополнительные документы: networkx.github.com/documentation/latest/reference/generated/   -  person seyed    schedule 25.02.2013


Ответы (1)


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

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

или если указано:

nx.weakly_connected_component_subgraphs(G) or nx.strongly_connected_component_subgraphs(G)

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

nx.is_strongly_connected(sub_G) or ng.is_weakly_connected(sub_G)

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

person Lendrick Robinson    schedule 25.05.2019