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