Módulo 15 - Projeto final: Mapa de Rotas
Achar o menor caminho com busca em largura
9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 12/07/2026
O que você vai aprender
- Entender por que a busca em largura acha o menor caminho em passos.
- Usar uma fila para controlar a ordem de visita dos vértices.
- Usar um conjunto de visitados para não repetir pontos nem entrar em loop.
- Seguir a busca em largura camada por camada sobre um grafo.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Achar o menor caminho com busca em largura.
Os objetivos desta aula. Entender por que a busca em largura acha o menor caminho em passos. Usar uma fila para controlar a ordem de visita dos vértices. Usar um conjunto de visitados para não repetir pontos nem entrar em loop. Seguir a busca em largura camada por camada sobre um grafo.
Veja o essencial, parte por parte.
Explorar por camadas. A busca em largura acha o menor caminho em número de passos.
A lógica, passo a passo. O algoritmo é um laço curto que repete quatro ideias.
Por que ela dá o menor caminho. A busca em largura acha o caminho com o menor NÚMERO de trechos.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Explorar por camadas
Imagine jogar uma pedra na origem e ver as ondas se espalharem. A primeira onda toca os vizinhos diretos, a onda seguinte toca os vizinhos deles, e cada onda está sempre a um passo além da anterior. A busca em largura é essa onda. Ela visita a origem, depois todos que estão a um passo, depois todos que estão a dois passos, sem pular ninguém. Por avançar de forma tão organizada, quando a onda finalmente toca o destino, ela chegou pelo caminho mais curto em passos. É por isso que a busca em largura é a ferramenta certa para o Mapa de Rotas: queremos a rota com menos trechos, e a busca em largura entrega exatamente isso.
Duas estruturas fazem a onda funcionar. A fila controla a ordem de visita: quem é descoberto primeiro é visitado primeiro, o que mantém a exploração camada por camada. O conjunto de visitados guarda quem a busca já alcançou, para não voltar a lugares já vistos. Sem ele, num grafo com ciclos (e o metrô tem vários), a busca daria voltas eternas, visitando Centro, Norte, Centro, Norte, para sempre. Juntas, a fila e o conjunto de visitados são o coração da busca em largura.
A lógica, passo a passo
O algoritmo é um laço curto que repete quatro ideias. Começa colocando a origem na fila e marcando a origem como visitada. Enquanto a fila tiver alguém, tira o próximo da frente da fila (esse é o vértice atual), olha cada vizinho dele e, para todo vizinho ainda não visitado, marca como visitado e coloca na fila. A busca termina quando a fila esvazia (visitou tudo que dava para alcançar) ou quando o atual é o destino (achou). Repare que marcar o vizinho como visitado acontece no momento em que ele entra na fila, não quando sai. Marcar cedo é o que impede o mesmo ponto de entrar na fila várias vezes.
funcao busca_largura(grafo, origem, destino)
fila <- [origem]
visitados <- {origem}
enquanto fila nao vazia faca
atual <- desenfileirar(fila) // tira da frente
se atual = destino entao
retorne "achou o destino"
para cada vizinho de grafo[atual] faca
se vizinho nao esta em visitados entao
adicionar(visitados, vizinho)
enfileirar(fila, vizinho) // poe no fim
fim
fim
fim
retorne "sem caminho"
fimA fila dá a ordem de visita; o conjunto de visitados garante que cada vértice entra uma vez só.
🎮 Jogo da aula
A ordem da busca em largura
Coloque os passos de uma iteração da busca em largura na ordem certa. Eles aparecem embaralhados.
Por que ela dá o menor caminho
A garantia do menor caminho vem da disciplina da fila. Como a busca sempre tira da fila quem entrou primeiro, ela esgota toda a camada de distância um antes de tocar em qualquer ponto de distância dois, e assim por diante. Logo, a primeira vez que um vértice é alcançado é sempre pela rota mais curta em passos, porque uma rota mais longa chegaria numa camada posterior, quando o ponto já estaria marcado como visitado e seria ignorado. Vale lembrar o limite: a busca em largura conta passos, não distância física nem tempo. Se cada trecho tivesse um peso diferente (uns longos, outros curtos), o menor caminho em quilômetros exigiria outro algoritmo. Para contar trechos, baldeações ou apertos de mão, a busca em largura é exata.
Teste rápido
Por que a busca em largura encontra o menor caminho em número de passos?
Perguntas frequentes
- Por que a fila, e não uma pilha?
- A fila atende quem chegou primeiro, o que faz a busca avançar camada por camada e garante o menor caminho em passos. Uma pilha atende quem chegou por último, e leva à busca em profundidade, que mergulha fundo num ramo antes de olhar os outros. Para achar o caminho mais curto em passos, a ordem da fila é essencial.
- O que acontece se eu esquecer o conjunto de visitados?
- Num grafo com ciclos, a busca entra em loop: visita Centro, vai para Norte, volta para Centro, e assim para sempre, enchendo a fila sem parar. O conjunto de visitados corta isso: antes de enfileirar um vizinho, o algoritmo confere se ele já foi visto. Sem esse controle, a busca em largura simplesmente não termina.
- Devo marcar o vizinho como visitado ao enfileirar ou ao desenfileirar?
- Ao enfileirar, no momento em que ele é descoberto. Se você esperar até desenfileirar, o mesmo vértice pode ser descoberto por vários vizinhos e entrar na fila várias vezes, desperdiçando trabalho e podendo causar repetições. Marcar cedo, na descoberta, é a versão correta e enxuta da busca em largura.
- A busca em largura sempre acha um caminho?
- Só se existir um. Ela alcança todos os vértices acessíveis a partir da origem. Se o destino estiver nesse alcance, ela o encontra; se estiver numa parte desconectada do grafo, a fila esvazia sem achar, e o programa responde que não há caminho. Essa resposta negativa é correta, não um erro.
- E se houver vários caminhos mais curtos com o mesmo tamanho?
- A busca em largura encontra um deles, aquele que a ordem da fila e a ordem dos vizinhos fizerem aparecer primeiro. Todos têm o mesmo número de passos, então qualquer um serve como menor caminho. Se você precisar de um critério de desempate específico, ajusta a ordem em que os vizinhos são visitados.
- Dá para achar não só se existe, mas qual é o caminho?
- Dá, e é o assunto da próxima aula. A ideia é anotar, para cada vértice visitado, de quem ele foi descoberto (o pai). No fim, seguindo os pais do destino de volta até a origem, você reconstrói a rota. A busca em largura acha a distância; guardar os pais permite recuperar o caminho inteiro.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.