🚀 Capítulo 15: Caminhamento em Grafos (BFS/DFS) (Tema: Indiana Jones)
NOTE
Este capítulo utiliza a temática de Indiana Jones para explicar o caminhamento em grafos. Explorar um templo perdido exige uma estratégia: ou você vai até o fundo de um túnel (DFS) ou explora as salas vizinhas primeiro (BFS)!
1. 🎯 Objetivo da Aula
Compreender os dois principais algoritmos de busca e caminhamento em grafos: Busca em Profundidade (DFS) e Busca em Largura (BFS), identificando suas diferenças e casos de uso.
2. 🏢 O Cenário Prático (Seu Desafio)
Indiana Jones entrou em uma pirâmide. O mapa das salas e túneis forma um grafo. Ele está na Sala A (Entrada) e quer encontrar a Sala com o Tesouro. Ele pode usar duas estratégias de exploração:
- Estratégia 1 (O Teimoso): Ele escolhe um túnel e vai andando por ele até não poder mais (batendo na parede ou num beco sem saída). Só então ele volta e tenta outro túnel.
- Estratégia 2 (O Precavido): Ele olha todas as portas da Sala A e dá um passo em cada uma. Depois, ele olha todas as portas das salas onde acabou de pisar. Ele se move como uma onda se espalhando.
Seu desafio é entender como o computador executa essas duas buscas!
3. 🧠 Fundamentos: A Teoria Traduzida
Percorrer um grafo significa visitar todos os vértices acessíveis a partir de um ponto inicial.
🕵️♂️ 1. DFS (Depth-First Search) - Busca em Profundidade
É a estratégia do “Teimoso”. O algoritmo avança o máximo possível ao longo de cada ramo antes de retroceder (backtracking).
- Como funciona: Usa uma Pilha (Stack) para lembrar de onde veio.
- Uso: Resolver labirintos, jogos de xadrez (prever jogadas futuras até o fim).
🌊 2. BFS (Breadth-First Search) - Busca em Largura
É a estratégia do “Precavido”. O algoritmo explora os vizinhos do nó inicial primeiro, depois os vizinhos dos vizinhos.
- Como funciona: Usa uma Fila (Queue) para organizar a ordem de visita.
- Uso: Encontrar o caminho mais curto (Ex: GPS), redes sociais (amigos de 1º grau, 2º grau).
4. 📖 Exemplo Guiado: O Mapa do Templo
graph TD A((Sala A)) --> B((Sala B)) A --> C((Sala C)) B --> D((Sala D)) C --> E((Sala E))
- Na busca DFS: A ordem de visita seria
A -> B -> D(vai até o fundo) e depois volta paraC -> E. - Na busca BFS: A ordem de visita seria
A -> B -> C(primeiro nível) e depoisD -> E(segundo nível).
5. 🛠️ Prática Obrigatória 1: Simulando o Caminho
Com base no exemplo guiado, se o tesouro estivesse na Sala C:
- Qual busca (DFS ou BFS) encontraria o tesouro fazendo menos passos?
- E se o tesouro estivesse na Sala D?
6. 🛠️ Prática Obrigatória 2: GPS e Redes Sociais
Qual algoritmo (BFS ou DFS) o Google Maps usa para encontrar o caminho mais curto entre a sua casa e a escola? Por quê? (Dica: Pense em qual deles se espalha em círculos ao redor do ponto de partida).
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 15 Estruturas de Dados) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_09_estruturas_de_dados/
├── capitulos/
│ ├── capitulo_15_caminhamento.md
│ └── codigos/
│ └── cap15/
│ └── busca_templo.js9. 💡 Checkpoint de Lógica
Se um grafo tiver um ciclo (um caminho que volta para o início), o que acontece com os algoritmos DFS e BFS se não marcarmos os nós que já foram visitados? (Dica: Eles vão parar de rodar algum dia?).
10. 🔥 Desafio de Fixação
Pesquise o que é o Algoritmo de Dijkstra e como ele melhora a busca BFS para encontrar o caminho mais curto em grafos com pesos (distâncias).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Para a Sala C, o BFS acharia primeiro (visita A, depois B, depois C). O DFS iria até o fundo do ramo B (
A->B->D) antes de tentar o C. - Para a Sala D, o DFS acharia primeiro (
A->B->D), enquanto o BFS passaria por C antes de chegar em D.