Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.14 KB | None | 0 0
  1. # Importando valores de arrestas. Você vai criar um arquivo texto na mesma pasta que esse programa chamado sratch.txt
  2. # Lá você vai copiar e colar suas arrestas, no formato do exemplo abaixo
  3. '''
  4. ((4, 2), (6, 4))
  5. ((5, 9), (2, 12))
  6. ((6, 4), (8, 6))
  7. ((8, 6), (5, 9))
  8. ((8, 6), (10, 8))
  9. ((10, 8), (10, 12))
  10. ((10, 12), (13, 18))
  11. '''
  12. # Essa parte do programa pega os valores do arquivo texto.
  13. import re
  14.  
  15. lines = [line.rstrip('\n') for line in open("scratch.txt")]
  16. regex = r"\((\d+.*?)\)"
  17. matches = []
  18.  
  19. for line in lines:
  20. match = (re.findall(regex, line))
  21. for i in match:
  22. match[match.index(i)] = list(i.split(","))
  23. matches.append(match)
  24.  
  25. for arrestas in matches:
  26. a = matches.index(arrestas)
  27. for vertices in arrestas:
  28. b = arrestas.index(vertices)
  29. for i in vertices:
  30. c = vertices.index(i)
  31. matches[a][b][c] = int(i)
  32.  
  33. # Suas arestas
  34. arestas = matches
  35.  
  36. # Preparando itens que serão úteis depois.
  37. vertices = []
  38. nos = set()
  39. adjacentes = []
  40.  
  41. # Isso tudo apenas prepara uma lista com apenas um de cada vértice.
  42. for aresta in arestas:
  43. for p in range(2):
  44. a = tuple(aresta[p])
  45. vertices.append(a)
  46.  
  47. for vertice in vertices:
  48. nos.add(vertice)
  49.  
  50. nos = list(nos)
  51.  
  52. for no in nos:
  53. new_no = list(no)
  54. nos[nos.index(no)] = new_no
  55.  
  56. # Fim do preparo
  57.  
  58.  
  59. # Indice inicial para contar a lista adjacente.
  60. # Nesse programa pressupõe já que o índice do vértice único sendo analisado
  61. # tem um número indice correspondente à sua posição na lista nos.... o que significa
  62. # que i_ad não precisa existir, só preciso puxar nos.index(no)... hmm por isso que
  63. # comentar é importante, vemos cada coisa que tava no subconsciente...
  64. i_ad = 0
  65.  
  66. for no in nos: # Tudo abaixo irá rodar pra cada vértice único existente.
  67. for p in range(2): # Preparando pra testar ambos os vértices de cada aresta
  68. for aresta in arestas: # Olhando em cada aresta, um vértice específico
  69. if no == aresta[p]: # Comparando se o vértice é o atualmente sendo procurado
  70. #print("Inserindo valor...") # no == aresta[p] então um valor será inserido.
  71. try: # Verificando se existe uma lista de índice i_ad. Se resultar em erro
  72. if adjacentes[i_ad][1] != no: # significa que não tem e o except cria tal lista.
  73. print("Nada vai printar, só preciso do erro")
  74. except:
  75. adjacentes.append([i_ad, no])
  76. #print("Iniciando lista de adjacência para",no,":", adjacentes)
  77. #print("")
  78. if p == 0:
  79. adjacentes[i_ad].append(aresta[1]) # Ao notar que na aresta existe o vértice sendo procurado
  80. else: # colocamos o seu par na lista de adjacência. :)
  81. adjacentes[i_ad].append(aresta[0])
  82. i_ad += 1 # Próximo indice.
  83.  
  84. print("Lista de Adjacência completa:")
  85. #print('\n'.join(map(str, adjacentes))) # Apresenta lista de adjacência de forma mais legível.
  86.  
  87. for i in adjacentes: # O resultado sem o primeiro número.
  88. print(i[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement