@@ -174,6 +174,41 @@ def vizinhos(arestas, vertice, primeira_vez = False):
174
174
return predecessor , adjacentes
175
175
if (primeira_vez == False ):
176
176
return adjacentes
177
+
178
+ # funcao que checa se ha ciclo fechado
179
+ def checar_ciclos (arestas , vertices ):
180
+ tem_ciclo = False
181
+ vizinhos = {} # vertice: arestas vizinhas deste vertice
182
+ loop = False
183
+ cont = 0
184
+
185
+ # loop para se adicionar os vizinho de todos os vertices no dicionario "vizinhos"
186
+ while cont < len (vertices ):
187
+ lista = []
188
+ for a in arestas :
189
+ if vertices [cont ] in a :
190
+ lista .append (a )
191
+ vizinhos [vertices [cont ]] = lista
192
+ cont = cont + 1
193
+
194
+ for v in vizinhos :
195
+ for a in vizinhos [v ]:
196
+ cont = 0
197
+ loop = True
198
+ lista = []
199
+ lista2 = []
200
+ lista .append (a )
201
+ lista2 .append (v )
202
+ while loop == True :
203
+ for i in range (2 ):
204
+ if (lista2 [cont ] != lista [cont ][i ]):
205
+ lista .append (lista [cont ][i ])
206
+
207
+ cont = cont + 1
208
+
209
+
210
+ return tem_ciclo
211
+
177
212
# ----------------------------------------------------------------------ALGORITMOS-----------------------------------------------
178
213
def dijkstra ():
179
214
global g
@@ -322,7 +357,7 @@ def spanning_tree():
322
357
global vertices
323
358
global arestas
324
359
global pesos
325
- antes = {}
360
+ antes = {} # aresta: peso
326
361
depois = {}
327
362
arestas2 = []
328
363
pesos2 = []
@@ -332,12 +367,45 @@ def spanning_tree():
332
367
print 'ARESTAS: ' + str (arestas )
333
368
print 'PESOS: ' + str (pesos )
334
369
335
- for i in range (len (vertices )):
370
+ # ordenar os pesos em ordem crescente e adicionar as 2 primeiras arestas na arvore final
371
+ for i in range (len (arestas )):
336
372
antes [arestas [i ]] = pesos [i ]
337
373
print antes
338
- menor = pesos
339
- menor .sort ()
340
- arestas2 .append
374
+ menor_pesos = pesos
375
+ menor_pesos .sort ()
376
+ menor_arestas = []
377
+ for p in menor_pesos :
378
+ for a in arestas :
379
+ if (antes [a ] == p ):
380
+ menor_arestas .append (a )
381
+ for i in range (2 ):
382
+ arestas2 .append (menor_arestas [i ])
383
+ pesos2 .append (menor_pesos [i ])
384
+
385
+ # comecar o algoritmo de kruskal
386
+ cabou = False
387
+ cont = 2
388
+ while cabou == False :
389
+ lista = []
390
+ arestas2 .append (menor_arestas [cont ])
391
+ n_arestas = len (arestas2 )
392
+ for i in range (len (arestas2 )):
393
+ for j in range (2 ):
394
+ lista .append (arestas2 [i ][j ])
395
+ lista2 = []
396
+ for v in lista :
397
+ if v not in lista2 :
398
+ lista2 .append (v )
399
+ n_vertices = len (lista2 )
400
+ graus = [0 ]* (len (lista2 ))
401
+ for i in range (len (lista2 )):
402
+ for j in range (len (lista )):
403
+ if lista [j ] == lista2 [i ]:
404
+ graus [lista2 [i ]] = graus [lista2 [i ]] + 1
405
+
406
+
407
+
408
+
341
409
'''
342
410
t = Graph()
343
411
t.add_vertices(len(vertices))
0 commit comments