Módulo 7 - Percursos em grafos: largura, profundidade e caminho
Visitados e ciclos: como não andar em círculos
8 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 o conjunto de visitados é indispensável em grafos com ciclo.
- Reconhecer que uma aresta para um vértice já visitado indica um ciclo.
- Diferenciar grafo com ciclo de grafo sem ciclo (acíclico).
- Ligar a marcação de visitados à detecção de ciclos.
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: Visitados e ciclos: como não andar em círculos.
Os objetivos desta aula. Entender por que o conjunto de visitados é indispensável em grafos com ciclo. Reconhecer que uma aresta para um vértice já visitado indica um ciclo. Diferenciar grafo com ciclo de grafo sem ciclo (acíclico). Ligar a marcação de visitados à detecção de ciclos.
Veja o essencial, parte por parte.
O herói silencioso das buscas. O conjunto de visitados marca cada vértice já visto para que a busca não o processe de novo.
A aresta que volta revela o ciclo. O mesmo conjunto que evita o loop serve para uma pergunta importante: este grafo tem ciclo?
Grafos com e sem ciclo no dia a dia. Marque o vértice como visitado assim que ele entra na busca (na fila da BFS, ou ao entrar na chamada da DFS).
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
O herói silencioso das buscas
Nas duas aulas de busca, o conjunto de visitados apareceu quase de passagem, mas é ele que separa um algoritmo que termina de um que trava. A árvore, que você estudou antes, tem uma propriedade cômoda: não há ciclos, então nunca se chega ao mesmo nó por dois caminhos, e uma busca pode até dispensar a marcação. O grafo geral não dá esse conforto. Como ele pode ter ciclos, dois vértices podem se ligar por várias rotas, e sem marcar quem já foi visto a busca redescobre os mesmos vértices repetidamente. Num grafo com ciclo, isso vira um loop sem fim: a busca dá voltas eternas na mesma região.
Pense em explorar um prédio com corredores que se conectam em anel. Se você não marca as portas por onde já passou, corre o risco de dar voltas no mesmo circuito para sempre, sem nunca cobrir o prédio inteiro. Marcar cada sala visitada com um giz é o que garante que você olhe cada sala uma vez e termine. O conjunto de visitados é esse giz. Ele custa pouco, uma anotação por vértice, e em troca torna a busca finita e eficiente em qualquer grafo, tenha ele ciclos ou não. É o tipo de detalhe que não chama atenção quando está lá e derruba tudo quando falta.
A aresta que volta revela o ciclo
O mesmo conjunto que evita o loop serve para uma pergunta importante: este grafo tem ciclo? A ideia é direta. Durante a busca, cada vez que você olha um vizinho, verifica se ele já está no conjunto de visitados. Num grafo sem ciclos, todo vizinho novo é inédito. Mas se a busca encontra uma aresta que leva a um vértice já visitado, e que não é simplesmente o vértice de onde ela acabou de vir, isso significa que existe outra rota até aquele vértice, ou seja, um ciclo. Detectar ciclos é essencial em muitos sistemas: descobrir dependências circulares entre tarefas, tabelas de banco de dados que se referenciam em anel, ou impasses em que A espera B que espera A.
visitados <- {}
tem_ciclo <- falso
função visita(atual, anterior):
adiciona atual em visitados
para cada vizinho de atual faça
se vizinho não está em visitados então
visita(vizinho, atual)
senão se vizinho é diferente de anterior então
tem_ciclo <- verdadeiro // aresta para um já visitado: ciclo
fim
fimNuma DFS, achar um vizinho já visitado que não seja o de onde viemos denuncia um ciclo no grafo.
🎮 Jogo da aula
Visitados e ciclos: verdadeiro ou falso
Decida se cada afirmação sobre o conjunto de visitados e os ciclos é verdadeira ou falsa.
Grafos com e sem ciclo no dia a dia
Saber se um grafo tem ciclo muda como você raciocina sobre ele. Grafos acíclicos aparecem sempre que existe uma ordem natural sem voltas: a hierarquia de pastas, a sequência de pré-requisitos de matérias, os passos de uma receita, as dependências de um projeto que precisam ser feitas numa ordem. Nesses casos, um ciclo seria um problema: uma matéria que exige a si mesma como pré-requisito, uma tarefa que depende de outra que depende dela. Detectar esse ciclo cedo evita impasses. Já grafos com ciclo são a regra em redes livres: mapas de ruas têm quarteirões que se fecham, redes sociais têm grupos de amigos que se conhecem entre si, a web tem páginas que se linkam em círculo. Nesses, o conjunto de visitados não é um luxo, é o que permite qualquer exploração terminar.
Teste rápido
Por que uma busca num grafo com ciclo pode nunca terminar se você não usar o conjunto de visitados?
Perguntas frequentes
- O que exatamente é um ciclo num grafo?
- É um caminho que sai de um vértice e retorna a ele passando por arestas diferentes, sem repetir. Onde há ciclo, dá para dar uma volta e voltar ao ponto de partida. Um grafo sem nenhum ciclo é chamado de acíclico, e a árvore é o exemplo mais conhecido: entre dois nós existe um único caminho.
- Por que a árvore não precisa tanto do conjunto de visitados?
- Porque a árvore é acíclica: nunca se chega ao mesmo nó por dois caminhos, então a busca não corre o risco de reencontrar um vértice e entrar em loop. No grafo geral, que pode ter ciclos, a marcação passa a ser indispensável. Ainda assim, manter o conjunto de visitados na árvore não atrapalha e evita surpresas.
- Como a busca detecta que há um ciclo?
- Enquanto percorre, ela verifica cada vizinho. Se encontra um vizinho que já está no conjunto de visitados, e que não é apenas o vértice de onde acabou de vir, isso significa que existe outra rota até aquele vértice, ou seja, um ciclo. Essa aresta que volta a um já visitado é a assinatura do ciclo.
- Detectar ciclos serve para quê no mundo real?
- Para muita coisa: descobrir dependências circulares entre tarefas de um projeto, pré-requisitos de matérias que se exigem em anel, tabelas de banco que se referenciam mutuamente, ou impasses em que um processo espera outro que espera o primeiro. Achar o ciclo cedo evita travamentos e ordens impossíveis de cumprir.
- O conjunto de visitados serve para as duas buscas?
- Sim, tanto a busca em largura quanto a em profundidade dependem dele pelo mesmo motivo. Sem marcar quem já foi visto, um grafo com ciclo faz ambas rodarem para sempre. Na profundidade recursiva, o esquecimento vira recursão infinita, que estoura a pilha de chamadas. É uma peça comum e obrigatória das duas.
- Marcar visitados deixa a busca mais lenta?
- Ao contrário, deixa mais rápida e segura. Cada vértice é marcado uma vez e consultado com custo pequeno, o que evita reprocessar vértices repetidos e impede o loop infinito. O ganho de nunca refazer trabalho supera de longe o custo mínimo da marcação. Sem ela, além do risco de travar, a busca faria trabalho repetido à toa.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.