-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobtener_nueva_arista.py
30 lines (27 loc) · 1.37 KB
/
obtener_nueva_arista.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def obtener_nueva_arista_en_ciclo(G, Gs, ciclo):
candidato = {
'predecesor': None,
'vertice': None,
'predecesor_actual': None,
'peso_adicional': float('inf'),
'peso': float('inf'),
}
for vertice in ciclo:
# por cada nodo, debemos seleccionar la menor diferencia.
print(f'Por vertice {vertice} hallar la diferencia entre predecesor actual (i_predecesor) y otros.')
actual_predecesor = list(Gs.predecessors(vertice))[0]
actual_predecesor_peso = Gs.get_edge_data(actual_predecesor, vertice)['weight']
print(f'predecesor {actual_predecesor}, peso: {actual_predecesor_peso}')
for predecesor in G.predecessors(vertice):
if predecesor == actual_predecesor:
continue
# print(predecesor, vertice, actual_predecesor, )
peso = G.get_edge_data(predecesor, vertice)['weight']
peso_adicional = peso - actual_predecesor_peso
if peso_adicional < candidato['peso_adicional']: # Podría hacerse <=. Se usa el ultimo que tenga el minimo o el primero.
candidato['predecesor'] = predecesor
candidato['vertice'] = vertice
candidato['predecesor_actual'] = actual_predecesor
candidato['peso_adicional'] = peso_adicional
candidato['peso'] = peso
return candidato