Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Importando valores de arrestas. Você vai criar um arquivo texto na mesma pasta que esse programa chamado sratch.txt
- # Lá você vai copiar e colar suas arrestas, no formato do exemplo abaixo
- '''
- ((4, 2), (6, 4))
- ((5, 9), (2, 12))
- ((6, 4), (8, 6))
- ((8, 6), (5, 9))
- ((8, 6), (10, 8))
- ((10, 8), (10, 12))
- ((10, 12), (13, 18))
- '''
- # Essa parte do programa pega os valores do arquivo texto.
- import re
- lines = [line.rstrip('\n') for line in open("scratch.txt")]
- regex = r"\((\d+.*?)\)"
- matches = []
- for line in lines:
- match = (re.findall(regex, line))
- for i in match:
- match[match.index(i)] = list(i.split(","))
- matches.append(match)
- for arrestas in matches:
- a = matches.index(arrestas)
- for vertices in arrestas:
- b = arrestas.index(vertices)
- for i in vertices:
- c = vertices.index(i)
- matches[a][b][c] = int(i)
- # Suas arestas
- arestas = matches
- # Preparando itens que serão úteis depois.
- vertices = []
- nos = set()
- adjacentes = []
- # Isso tudo apenas prepara uma lista com apenas um de cada vértice.
- for aresta in arestas:
- for p in range(2):
- a = tuple(aresta[p])
- vertices.append(a)
- for vertice in vertices:
- nos.add(vertice)
- nos = list(nos)
- for no in nos:
- new_no = list(no)
- nos[nos.index(no)] = new_no
- # Fim do preparo
- # Indice inicial para contar a lista adjacente.
- # Nesse programa pressupõe já que o índice do vértice único sendo analisado
- # tem um número indice correspondente à sua posição na lista nos.... o que significa
- # que i_ad não precisa existir, só preciso puxar nos.index(no)... hmm por isso que
- # comentar é importante, vemos cada coisa que tava no subconsciente...
- i_ad = 0
- for no in nos: # Tudo abaixo irá rodar pra cada vértice único existente.
- for p in range(2): # Preparando pra testar ambos os vértices de cada aresta
- for aresta in arestas: # Olhando em cada aresta, um vértice específico
- if no == aresta[p]: # Comparando se o vértice é o atualmente sendo procurado
- #print("Inserindo valor...") # no == aresta[p] então um valor será inserido.
- try: # Verificando se existe uma lista de índice i_ad. Se resultar em erro
- if adjacentes[i_ad][1] != no: # significa que não tem e o except cria tal lista.
- print("Nada vai printar, só preciso do erro")
- except:
- adjacentes.append([i_ad, no])
- #print("Iniciando lista de adjacência para",no,":", adjacentes)
- #print("")
- if p == 0:
- adjacentes[i_ad].append(aresta[1]) # Ao notar que na aresta existe o vértice sendo procurado
- else: # colocamos o seu par na lista de adjacência. :)
- adjacentes[i_ad].append(aresta[0])
- i_ad += 1 # Próximo indice.
- print("Lista de Adjacência completa:")
- #print('\n'.join(map(str, adjacentes))) # Apresenta lista de adjacência de forma mais legível.
- for i in adjacentes: # O resultado sem o primeiro número.
- print(i[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement