Как изменить вес ребер по заданному правилу?

У меня есть взвешенный график:

F=nx.path_graph(10)
G=nx.Graph()
for (u, v) in F.edges():
    G.add_edge(u,v,weight=1)

Получить список узлов:

[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]

Я хочу изменить вес каждого края по этому правилу:

Удалите один узел, например узел 5, очевидно, ребра (4, 5) и (5, 6) будут удалены, а вес каждого ребра изменится на:

{# these edges are nearby the deleted edge (4, 5) and (5, 6)

(3,4):'weight'=1.1,

(6,7):'weight'=1.1,

 #these edges are nearby the edges above mentioned

(2,3):'weight'=1.2,

(7,8):'weight'=1.2,

 #these edges are nearby the edges above mentioned

(1,2):'weight'=1.3,

(8,9):'weight'=1.3,

 # this edge is nearby (1,2)

(0,1):'weight'=1.4}

Как написать этот алгоритм?

path_graph это просто пример. Мне нужна программа, подходящая для любого типа графика. Кроме того, программа должна быть итерируемой, это означает, что я могу каждый раз удалять один узел из исходного графа.


person Johnny    schedule 19.10.2010    source источник
comment
Я не понимаю правила перераспределения веса   -  person inspectorG4dget    schedule 19.10.2010


Ответы (1)


Вы можете получить доступ к весу ребра как G[u][v]['weight'] или перебирая данные ребра. Так что вы можете, например.

In [1]: import networkx as nx

In [2]: G=nx.DiGraph()

In [3]: G.add_edge(1,2,weight=10)

In [4]: G.add_edge(2,3,weight=20)

In [5]: G[2][3]['weight']
Out[5]: 20

In [6]: G[2][3]['weight']=200

In [7]: G[2][3]['weight']
Out[7]: 200

In [8]: G.edges(data=True)
Out[8]: [(1, 2, {'weight': 10}), (2, 3, {'weight': 200})]

In [9]: for u,v,d in G.edges(data=True):
   ...:     d['weight']+=7
   ...:     
   ...:     

In [10]: G.edges(data=True)
Out[10]: [(1, 2, {'weight': 17}), (2, 3, {'weight': 207})]
person Aric    schedule 04.11.2010