DAA 2021/2022 (CC2001) - DCC/FCUP

Aula Prática #10 - Distâncias Mínimas
(semana de 23/05 a 27/05)


Exercícios para submissão

Para efeitos da nota atribuída à resolução de exercícios ao longo do semestre, os exercícios a submeter desta aula são:

Prazo de submissão: 12 de Junho (submeter no Mooshak de DAA)

Não se esqueçam que qualquer ajuda que tenham recebido de outros colegas deve ser reconhecida nos comentário do programa que submetem.
Depois do prazo os problemas continuarão disponíveis no Mooshak, mas as submissões não contarão para a sua nota. Relebre que cada aula vale 10% da nota desta componente.
Para um problema contar tem acertar todos os testes. Mesmo que resolva todos os problemas, o máximo numa aula é de 100%.


Conteúdos das teóricas

Nesta aula iremos abordar conceitos de Distâncias Mínimas em Grafos. Será por isso conveniente ver o que foi falado nas teóricas:


Exercício 1) Introdução ao algoritmo de Dijkstra

Comece por fazer download do código exemplo do algoritmo de Dijkstra:

Se costuma usar C, a sugestão é que use a última versão, que é essencialmente C com excepção das listas e do uso do set, 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.

  1. Compile e execute o código usando como input o ficheiro dijkstra.txt, que corresponde ao grafo da figura seguinte (o mesmo que é usado na explicação do Dijkstra nos slides):

     
  2. Procure compreender todos as linhas do código dado. Experimente mudá-lo e começar de um outro nó que não o 1. Antes de executar consegue prever o output?
  3. Se quisesse imprimir também o caminho mínimo em si (e não apenas a distância) como poderia fazer? Experimente modificar o código de acordo com o que pensou e verifique se funciona

Exercício 2) Resolvendo um problema usando o Dijkstra


Usando como base o código dado no exercício anterior, implemente e submeta uma solução para o problema [DAA 033] Viagem para as aulas.

Dicas:


Exercício 3) Distâncias negativas e algoritmo de Bellman-Ford


Implemente e submeta uma solução para o problema [DAA 034] Buracos negros.

Dicas:


Exercício 4) Fecho transitivo e o algoritmo de Floyd-Warshall


Implemente e submeta uma solução para o problema [DAA 035] Ligações aéreas.

Dicas:


Exercício de Desafio

Todas as semanas vou colocar disponível pelo menos mais um exercício um pouco mais desafiante.

Para esta semana o desafio é de nível de um CIIC (Concurso Ibero-Americano de Informática), um concurso de programação para os melhores alunos pré-universitários dos países da América Latina (ex: México, Argentina, Brasil) e da Península Ibérica (Portugal e Espanha). O problema foi criado por mim e foi usado no CIIC'2012, estando disponível para submissão no Mooshak:

Se já tiverem feito tudo e estiverem "presos" neste, e quiserem mesmo fazer o desafio, podem contactar-me para eu "dosear" as dicas, sabendo que este problema é substancialmente mais complicado que os outros desta aula.