Aula Prática 8 Pesquisa em Largura

Propaganda
DAA 2015/2016 (CC2001)
DCC/FCUP
Aula Prática 8
Pesquisa em Largura
Esta aula irá consistir na implementação da pesquisa em largura para grafos não dirigidos. Será conveniente ver os slides do capı́tulo 6 (“Grafos - Pesquisa”).
Para efeitos da nota atribuida à resolução de exercı́cios ao longo do semestre, os exercı́cios a submeter
desta aula são:
• [19] - Análise de uma Rede Biológica (peso 50%)
• [20] - Nuvem de Cinzas (peso 50%)
Pesquisa em Largura com Lista de Adjacências
1. Começe por fazer download do código exemplo de pesquisa em largura que foi feito na aula teórica:
• BFS.java (versão original feita em Java)
• bfs.cpp (adaptação para C++)
• bfs c.cpp (adaptação para C/C++ ”quase como em C”)
Se costuma usar C, a sugestão é que use a última versão, que é essencialmente C com excepção das
listas, que já estão implementadas em C++ usando STL. A ideia é que progressivamente possa ir
começando a usar as estruturas de dados úteis que o C++ tem e o C não, continuando no essencial a
programar em C ”normal” e usando C++ apenas para essas estruturas de dados.
(a) Compile e execute o código usando como input o ficheiro graph.txt, que corresponde ao grafo
da figura seguinte:
(b) Experimente mudar o código e começar a pesquisa em largura a partir de outros nós que não o 1.
Antes de executar consegue prever o output?
Alguns Problemas de Pesquisa em Largura
2. Usando como base o código dado, implemente uma solução para o problema
[19] - Análise de uma Rede Biológica.
Dicas:
• Neste problema temos de encontrar as distâncias entre todos os pares de nós, para poder usar as
definições dadas. Procure construir uma matriz como a dadada no enunciado.
• Para saber a distância de um nó v a todos os outros nós (uma linha da matriz), faz-se uma
pesquisa em largura a partir do nó v (ver slides 41 e 42)
• No total vamos fazer N pesquisas em largura (uma para cada nó)
1
3. Implemente uma solução para o problema [20] - Nuvem de Cinzas.
Dicas:
• Este problema foi explicado nas aulas teóricas (ver slides 43 a 46).
• A ideia principal é fazer uma pesquisa em largura onde inicialmente todas as posições com cinza
já estão na fila (e com distância zero).
2
Download