8 min

BFS (Breadth-First Search)

Algoritmo de busca em largura que explora o grafo nível por nível, encontrando o caminho mais curto em grafos sem peso.

MédiaO(V + E) / O(V)GrafoBuscaFilaCaminho Mínimo

Visualizador Interativo

BFS - Busca em LarguraInicio: APasso 1 / 40
Processando
Visitado
Na fila
Explorando
Fila: [A](frente a esquerda)
Distancias
A=0
B=-
C=-
D=-
E=-
F=-
G=-
Velocidade:800ms
Historico de Passos
#0Iniciando BFS a partir de A. Fila: [A]

Como Funciona

BFS (Breadth-First Search) explora um grafo nível por nível, como ondas se espalhando em um lago. Primeiro visita todos os vizinhos diretos, depois os vizinhos dos vizinhos, e assim por diante. A chave do BFS é usar uma FILA (queue) em vez de pilha. A fila garante que vértices descobertos primeiro sejam processados primeiro (FIFO). Isso naturalmente resulta em exploração por níveis de distância. Por explorar nível por nível, BFS encontra automaticamente o caminho mais curto (em número de arestas) entre dois vértices em grafos sem peso. Esse é o motivo pelo qual é usado em GPS para encontrar rotas e em jogos para pathfinding em grids.

A fila FIFO garante que vértices mais próximos da origem sejam sempre processados antes dos mais distantes, resultando em exploração por níveis e caminho mínimo.

Passo a Passo

  1. Adicione o vértice inicial à fila e marque como visitado
  2. Remova o primeiro vértice da fila
  3. Processe o vértice (verifique se é o destino, etc.)
  4. Adicione todos os vizinhos não visitados à fila
  5. Repita até a fila esvaziar ou encontrar o destino

Análise de Complexidade

⏱️Tempo
O(V + E)

Cada vértice é enfileirado uma vez, e cada aresta é examinada uma vez.

Ver prova

O conjunto visited garante que cada vértice entra na fila apenas uma vez. Para cada vértice desenfileirado, iteramos sobre suas arestas adjacentes.

💾Espaco
O(V)

A fila pode conter até todos os vértices no pior caso (grafo estrela).

🎯Melhor Caso
O(1)

Se o destino é o próprio vértice inicial.

⚠️Pior Caso
O(V + E)

Quando precisamos visitar todo o grafo.

Comparação com Outros Algoritmos

AlgoritmoTempoEspacoMelhor Para
BFS(atual)O(V + E)O(V)Caminho mais curto em grafos sem peso, níveis de distância
DFSO(V + E)O(V)Detecção de ciclos, ordenação topológica
DijkstraO((V+E) log V)O(V)Caminho mais curto com pesos positivos

Dicas e Erros Comuns

  • Marcar como visitado ao REMOVER da fila (deve marcar ao ADICIONAR para evitar duplicatas)
  • Usar pilha em vez de fila (isso seria DFS)
  • Esquecer de tratar grafos desconexos
  • Não armazenar predecessores quando precisa reconstruir o caminho

Perguntas de Entrevista

Pratique respondendo a perguntas comuns de entrevistas tecnicas. Clique em uma pergunta para iniciar uma sessao de pratica com IA.

Implementacao

python
1from collections import dequeInicializar Fila
2
3
4def bfs(graph, start):Definição
5 visited = {start}Conjunto Visitados
6 queue = deque([start])Inicializar Fila
7 result = []
8
9 while queue:Loop Principal
10 vertex = queue.popleft()Desenfileirar
11 result.append(vertex)Processar Vértice
12
13 for neighbor in graph[vertex]:Enfileirar
14 if neighbor not in visited:Verificar Visitado
15 visited.add(neighbor)Marcar Visitado
16 queue.append(neighbor)Enfileirar
17
18 return result
19
20
21def bfs_with_distance(graph, start):Definição
22 visited = {start}Conjunto Visitados
23 queue = deque([(start, 0)])Inicializar Fila
24 distances = {start: 0}Rastrear Distância
25
26 while queue:Loop Principal
27 vertex, dist = queue.popleft()Desenfileirar
28
29 for neighbor in graph[vertex]:Enfileirar
30 if neighbor not in visited:Verificar Visitado
31 visited.add(neighbor)Marcar Visitado
32 distances[neighbor] = dist + 1Rastrear Distância
33 queue.append((neighbor, dist + 1))Enfileirar
34
35 return distances
36