Skip to content

Instantly share code, notes, and snippets.

@Falnesio
Last active February 20, 2019 19:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Falnesio/8d0a910c7f819b3d99db84f71148917c to your computer and use it in GitHub Desktop.
Save Falnesio/8d0a910c7f819b3d99db84f71148917c to your computer and use it in GitHub Desktop.
Gerar lista de adjacência para os vértices da Francyelle
# 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