|
2 | 2 | # Bruno Dantas de Paiva - 2021
|
3 | 3 | # https://github.com/DantasB
|
4 | 4 |
|
| 5 | +from collections import deque |
| 6 | + |
| 7 | + |
5 | 8 | class Grafo():
|
6 | 9 | """Define um grafo utilizando matriz de adjacências.
|
7 | 10 |
|
@@ -37,43 +40,53 @@ def __adiciona_aresta(self, u: int, v: int) -> None:
|
37 | 40 | if u not in self.adj[v]:
|
38 | 41 | self.adj[v].append(u)
|
39 | 42 |
|
40 |
| - def bfs(self, u: int) -> list: |
| 43 | + def bfs(self, start: int) -> list: |
41 | 44 | """Executa a busca em largura a partir do vértice u
|
42 | 45 |
|
43 | 46 | Args:
|
44 |
| - u (int): vértice u |
| 47 | + start (int): vértice start |
45 | 48 |
|
46 | 49 | Returns:
|
47 | 50 | list: lista com a ordem de vértices visitados
|
48 | 51 | """
|
49 |
| - visitados, fila = [], [u] |
| 52 | + fila = deque() |
| 53 | + fila.append(start) |
| 54 | + visitados = [] |
| 55 | + visitados.append(start) |
| 56 | + |
50 | 57 | while fila:
|
51 |
| - vertice = fila.pop(0) |
52 |
| - if vertice not in visitados: |
53 |
| - visitados.append(vertice) |
54 |
| - for element in self.adj[vertice]: |
55 |
| - if element not in visitados: |
56 |
| - fila.append(element) |
| 58 | + u = fila.popleft() |
| 59 | + |
| 60 | + for v in self.adj[u]: |
| 61 | + if v not in visitados: |
| 62 | + fila.append(v) |
| 63 | + visitados.append(v) |
57 | 64 |
|
58 | 65 | return visitados
|
59 | 66 |
|
60 |
| - def dfs(self, u: int) -> list: |
| 67 | + def dfs(self, start: int) -> list: |
61 | 68 | """Executa a busca em profundidade a partir do vértice u
|
62 | 69 |
|
63 | 70 | Args:
|
64 |
| - u (int): vértice u |
| 71 | + start (int): vértice start |
65 | 72 |
|
66 | 73 | Returns:
|
67 | 74 | list: lista com a ordem de vértices visitados
|
68 | 75 | """
|
69 | 76 | visitados = []
|
70 |
| - falta_visitar = [u] |
71 |
| - while falta_visitar: |
72 |
| - vertice = falta_visitar.pop() |
73 |
| - for vizinho in self.adj[vertice]: |
74 |
| - if vizinho not in visitados: |
75 |
| - visitados.append(vizinho) |
76 |
| - falta_visitar.append(vizinho) |
| 77 | + visitados.append(start) |
| 78 | + pilha = [start] |
| 79 | + |
| 80 | + while pilha: |
| 81 | + u = pilha.pop() |
| 82 | + |
| 83 | + if u not in visitados: |
| 84 | + visitados.append(u) |
| 85 | + |
| 86 | + for v in self.adj[u]: |
| 87 | + if v not in visitados: |
| 88 | + pilha.append(v) |
| 89 | + |
77 | 90 | return visitados
|
78 | 91 |
|
79 | 92 |
|
|
0 commit comments