Last active
February 20, 2019 19:00
-
-
Save Falnesio/8d0a910c7f819b3d99db84f71148917c to your computer and use it in GitHub Desktop.
Gerar lista de adjacência para os vértices da Francyelle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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:]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment