DFS, ordenação topológica, conexão forte
Questões-guia:
- Qual a explicação que Cormen dá para a BFS ser single-source enquanto que a DFS é multiple-source? Você concorda com ela?
- Por que Cormen exemplifica BFS em grafos não orientados, e DFS em grafos orientados? Em LEMON, dá pra rodar BFS e DFS em quais tipos de grafos?
- Quais são as saídas mais importantes de uma DFS?
- Por que o código da DFS é dividido em duas funções, enquanto que o da BFS fica em uma só função?
- O que é um DAG?
- O que é ordenação topológica e como ela pode ser resolvida por DFS?
- O que são componentes fortemente conexas? Como diferem das componentes conexas que vimos anteriormente?
- Se G é um grafo orientado, o que é GSCC? Que propriedade interessante tem GSCC?
- Como obter uma ordenação topológica em GSCC a partir de uma DFS em G?
- Se G é um grafo orientado, o que é o grafo GT? Como se relacionam GSCC e (GT)SCC?
Exercícios:
- Rode uma DFS da biblioteca LEMON no grafo usado como exemplo na Figura 22.4 do Cormen. Quantas linhas deu seu código? Deu a mesma busca do livro?
- Resolva o Exercício 22.4-1 com a biblioteca LEMON. Dica: use a class DfsVisit em lugar da Dfs normal.
- Implemente o algoritmo para componentes fortemente conexas da Seção 22.5 do Cormen usando LEMON. Teste no grafo da Figura 22.9. Dica: além da DfsVisit, use o adaptador de grafos que calcula GT e controle fino de DFS com os métodos init, addSource e start.
Nenhum comentário:
Postar um comentário