Percursos e componentes em grafos
BFS, DFS, ordenação topológica, bipartição e componentes fortemente conexas com Kosaraju e Tarjan.
Escolher o percurso
| Situação | Método | Condição | Custo |
|---|---|---|---|
| Menor número de arestas desde | BFS com fila | Pesos iguais ou ignorados; marcar ao inserir | |
| Explorar ramos e detetar ciclos | DFS com regresso | Reiniciar em cada vértice por visitar | |
| Ordenar dependências | Kahn ou DFS invertida | DAG; Kahn deve emitir | |
| Regiões mutuamente alcançáveis | Kosaraju ou Tarjan | Grafo dirigido | |
| Duas cores sem conflito | BFS por componente | Testar cada componente |
, , listas de adjacência. Memória auxiliar .
BFS e distâncias sem pesos
- Marca o vértice ao inserir na fila, não ao retirar.
- Na primeira descoberta, e
pai[v]=u. - é o mínimo número de arestas desde .
- Inalcançável mantém distância desconhecida, nunca zero.
- Com pesos distintos, usa caminhos mínimos.
DFS, cores e ciclos
- Branco: por descobrir. Cinzento: chamada ativa. Preto: chamada terminada.
- Aresta dirigida para cinzento fecha um ciclo; para preto não prova ciclo.
- Em grafo não dirigido, a aresta de regresso ao pai não conta. Com paralelas, distingue pelo identificador da aresta.
- Intervalos de descoberta e término disjuntos ou encaixados; contenção indica ancestralidade.
- Profundidade até ; em grafos grandes, a recursão pode exigir versão iterativa.
Ordem topológica
Existe se e só se o grafo dirigido não tem ciclos.
- Kahn: fila com graus de entrada zero; emite, reduz sucessores, insere novos zeros.
- Se emitir menos de , há ciclo e a ordem parcial é inválida.
- Alternativa: inverter términos de DFS após excluir arestas de retorno.
- Várias ordens podem ser válidas; fila de prioridade dá a menor segundo desempate, com custo extra.
Bipartição
- BFS em cada componente com cores opostas em vizinhos.
- Aresta com cores iguais revela ciclo ímpar e rejeita.
- Bipartido exatamente quando não há ciclos ímpares.
- Árvores e ciclos pares passam; triângulos falham.
Componentes fortemente conexas
SCC é conjunto maximal com alcançabilidade mútua. Maximal não é maior tamanho.
A aresta não funde SCC sem regresso. Contrair cada SCC dá um DAG.
Kosaraju:
- DFS completa em ; guarda ordem de término.
- Constrói com arestas invertidas.
- DFS em por término decrescente; cada árvore é uma SCC.
Tarjan (uma passagem):
low[u]é o menor índice alcançável na região ativa.- Vizinho novo: explora e usa
low[v]. - Vizinho na pilha: usa
index[v]. - Vizinho fora da pilha: ignora, pertence a SCC fechada.
low[u]==index[u]fecha SCC ao desempilhar até .
Precisa de onStack, não apenas visited. A pilha de Tarjan difere da pilha de chamadas.