-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbron.py
134 lines (93 loc) · 4.13 KB
/
bron.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# destinado a funcoes comuns p/ ambos algoritmos
def neighbor(v, lista):
"""retorna os vertices adjacentes a v"""
return lista[str(v)]
def get_all_vertex(lista):
"""retorna P (all vertex from adjacency list)"""
vertices = []
for key, value in lista.items():
vertices.append(int(key))
return vertices
# copied from https://www.geeksforgeeks.org/python-intersection-two-lists/ and
# https://www.geeksforgeeks.org/python-union-two-lists/
# Python program to illustrate the intersection
# of two lists in most simple way
def intersection(lst1, lst2):
lst3 = [value for value in lst1 if value in lst2]
return lst3
def union(lst1, lst2):
return lst1 + lst2
def difference(lst1, lst2):
"""return lst1 \ lst2"""
lista_difference = []
for value in lst1:
if value not in lst2:
lista_difference.append(value)
return lista_difference
# criação lista de adjacencia:
def read_file(filename):
"""
Funcao p ler o arquivo txt que servira de base de dados do grafo
string :: IO
filename -> arquivo
"""
arquivo = open(filename, "r")
golfinhos = arquivo.read()
arquivo.close()
return golfinhos
def create_dolphin_list(txt):
"""
cria lista de adjacencia a partir do texto do arquivo
string :: list
txt -> lista_golfinhos
lista_golfinhos = {
vertice_1 : [vertices_adjacentes],
vertice_2 : [vertices_adjacentes],
...
vertice_n : [vertices_adjacentes]
}
vertices_adjacentes = [v1, v2, v3], vn Inteiro
obs.: o código é meio confuso devido a forma como está escrito o soc-doplhins.txt e nao queria alterá-lo
"""
lista_golfinhos = {}
# divide o texto a partir da string do arquivo, so precisamos da 2a posicao que eh onde estao os numeros:
txtNumeros = txt.split("62 62 159")[1]
# dividindo os espacos para resultar em uma array com os valores separados por um espaco ex.: ["11 1"]
txtArray = txtNumeros.split("\n")
# variavel responsavel por manter o vertice atual da lista
vertice_atual = ""
# array para os vertices adjacentes de cada vertice até o 55
vertices_adjacentes = []
for texto in txtArray:
vertices = texto.split(" ")
# usando a segunda coluna como chave para vertice vertice[0]: vertice adjacente vertice[1]: vertice atual
if len(vertices) == 2:
if vertice_atual != vertices[1]:
# se o vertice for novo ele eh inserido na lista e eh definido como vertice atual e os vertices adjacentes sao zerados
vertice_atual = vertices[1]
vertices_adjacentes = []
vertices_adjacentes.append(int(vertices[0]))
lista_golfinhos[vertice_atual] = vertices_adjacentes
else:
# se vertice ja existir na lista, adiciona o novo vertice adjacente
vertices_adjacentes = lista_golfinhos.get(vertice_atual)
vertices_adjacentes.append(int(vertices[0]))
lista_golfinhos[vertice_atual] = vertices_adjacentes
# segundo for para os vertices que nao aparecem na segunda coluna:
for texto in txtArray:
vertices = texto.split(" ")
# usando a segunda coluna como chave para vertice vertice[1]: vertice adjacente vertice[0]: vertice atual
if len(vertices) == 2:
vertice_atual = vertices[0]
if not lista_golfinhos.get(vertice_atual):
# se o vertice for novo ele eh inserido na lista e eh definido como vertice atual e os vertices adjacentes sao zerados
vertices_adjacentes = []
vertices_adjacentes.append(int(vertices[1]))
lista_golfinhos[vertice_atual] = vertices_adjacentes
else:
# se vertice ja existir na lista, adiciona o novo vertice adjacente
vertices_adjacentes = lista_golfinhos.get(vertice_atual)
if int(vertices[0]) not in vertices_adjacentes:
vertices_adjacentes.append(int(vertices[1]))
lista_golfinhos[vertice_atual] = vertices_adjacentes
return lista_golfinhos