Você está na página 1de 2

BFS FUNCIONANDO

class Grafo:

def __init__(self):
self.grafo = {} def adicionar_aresta(self, origem, destino, distancia):

if origem not in self.grafo: self.grafo[origem] = [] self.grafo[origem].append((destino,


distancia))

def buscar_bfs(self, origem, destino):


fila = [[origem]] visitados = set() if origem == destino:
return "Origem e destino são iguais!"

while fila: caminho = fila.pop(0) no_atual = caminho[-1] if no_atual not in visitados:

vizinhos = self.grafo.get(no_atual, []) for vizinho, distancia in vizinhos:


novo_caminho = list(caminho)
novo_caminho.append(vizinho) fila.append(novo_caminho)

if vizinho == destino:
return novo_caminho

visitados.add(no_atual)
return "Caminho não encontrado."

def buscar_dfs_menor_aresta(self, origem, destino):


pilha = [(0, origem, [])]

while pilha:
(peso, vertice, caminho) = pilha.pop() if vertice not in caminho:
caminho = caminho + [vertice]
if vertice == destino:

return caminho for (vizinho, distancia) in self.grafo.get(vertice, []):

pilha.append((peso + distancia, vizinho, caminho))

return "Caminho não encontrado." def distancia_total(self, caminho):


distancia = 0 for i in range(len(caminho) - 1):
origem = caminho[i] destino = caminho[i + 1] for (vizinho, dist) in self.grafo[origem]:
if vizinho == destino:
distancia += dist return distancia if __name__ == "__main__":
grafo = Grafo()
# Adição das arestas com vértices e pesos

grafo.adicionar_aresta('Piracicaba', 'Americana', 30) grafo.adicionar_aresta('Piracicaba',


'Tiete', 35) grafo.adicionar_aresta('Piracicaba', 'Capivari', 32)
grafo.adicionar_aresta('Americana', 'Paulinia', 22) grafo.adicionar_aresta('Americana',
'Sumaré', 18) grafo.adicionar_aresta('Capivari', 'Monte Mor', 15)
grafo.adicionar_aresta('Capivari', 'Tiete', 30) grafo.adicionar_aresta('Capivari', 'Salto',
25) grafo.adicionar_aresta('Tiete', 'Tatui', 25) grafo.adicionar_aresta('Tiete', 'Porto
Feliz', 30) grafo.adicionar_aresta('Indaiatuba', 'Campinas', 20)
grafo.adicionar_aresta('Paulinia', 'Campinas', 25) grafo.adicionar_aresta('Sumaré',
'Campinas', 23) grafo.adicionar_aresta('Monte Mor', 'Campinas', 22)
grafo.adicionar_aresta('Salto', 'Itu', 10) grafo.adicionar_aresta('Salto', 'Indaiatuba', 20)
grafo.adicionar_aresta('Tatui', 'Boituva', 17) grafo.adicionar_aresta('Porto Feliz',
'Boituva', 12) grafo.adicionar_aresta('Itu', 'Sorocaba', 8)

cidade_origem = input("Digite a cidade de origem: ")


cidade_destino = input("Digite a cidade de destino: ")
algoritmo = input("Escolha o algoritmo de busca (BFS ou DFS): ")

if algoritmo.upper() == "BFS": resultado = grafo.buscar_bfs(cidade_origem,


cidade_destino)
elif algoritmo.upper() == "DFS": resultado =
grafo.buscar_dfs_menor_aresta(cidade_origem, cidade_destino)

else: resultado = "Algoritmo de busca não reconhecido."

if resultado != "Caminho não encontrado.": print("Caminho encontrado:", resultado)

distancia = grafo.distancia_total(resultado)

print("Distância total percorrida:", distancia)

else: print(resultado)

Você também pode gostar