У меня есть неориентированный граф, и я хочу итеративно удалить каждое последовательное ребро и заменить его новым ребром. Вес нового ребра представляет количество связующих деревьев и должен быть вычислен следующим образом: T_new = (1/a+b) * T_old
, где a и b - веса удаленных ребер, T_new - это количество остовных деревьев в текущей итерации, а T_old - количество остовных деревьев в предыдущей итерации. Это уравнение изменяется итеративно по мере изменения графика, поэтому, если у нас есть 4 итерации, у нас будет 4 уравнения, каждое из которых соответствует предыдущему. Мы остановимся, как только у графа не останется серийных ребер. Если конечный граф состоит из 1 ребра, вес этого ребра является последним T_new, и у нас будет числовое значение T-old. В противном случае мы должны иметь T_old в терминах T_new. Вот прикрепленное изображение , объясняющее, что я сказал в случае, если это не очень хорошо объяснено.
Вот часть моего кода, описывающая проблему:
** PS: мне нужна только часть, где уравнение меняется на каждой итерации, а не то, что нужно сделать, чтобы удалить и добавить новые ребра и т. Д. Вот пример: * *
import networkx as nx
def fun2(G) :
L1= G.degree()
print(L1)
L= list(L1)
for x in L :
if G.degree(x[0]) == 2 : #if the adjacent edges to x[0] are serial
... do somthing(remove edges and add new one with new weight)
#T-new = 1/(a+b) T-old here the equation should change
def tau(G) : # it should return T_old which is the number of spanning trees of the initial graph
if G.number_of_edges() == 1 :
T_new = list(G.edges(data=True))[0][2]['weight']
T_old = (a+b) * t_new
else :
T_new = 1/(a+b) * tau(G)
T_old = (a+b) * t_new
return t_old