(revisado em Tue May 24 14:51:30 2011)
O objetivo do trabalho é a implementação de algoritmos que resolvam problemas em grafos.
Os problemas a serem resolvidos são explicados no final deste texto e estão listados abaixo:
O grupo deve escolher dois destes problemas, resolver e implementar (de acordo com as especificações abaixo).
O trabalho deve ser feito de forma que possa ser compilado e executado nas servidoras de computação do Departamento de Informática. Todas as entradas devem ser lidas da entrada padrão e as saídas escritas na saída padrão.
Para compilar vou usar os comandos make clean
(para limpar
compilações anteriores) e make
(sem nenhum parâmetro), portanto
preparem o makefile para fazer isso. O resultado do make deverá ficar no
mesmo diretório onde está o makefile. Todos os executáveis devem ser
gerados com uma única chamada ao make
.
Além dos arquivos fonte, deve acompanhar um makefile
e um arquivo
README
explicando o que foi feito e com o nome dos autores. Qualquer
particularidade deve estar descrita neste texto.
O trabalho deve ser empacotado em um arquivo
login1-login2-login3.tar.gz, onde login1-login2-login3 é uma string com
os logins dos integrantes da equipe nas servidoras do DInf. Ao
descompactar este arquivo deverá ser criado um diretório de nome
login1-login2-login3 que conterá todos os demais arquivos. O make
deverá funcionar dentro deste diretório (não em subdiretórios).
Este arquivo deve ser enviado por e-mail ao endereço do professor (andre) com o assunto "CI065-trab2" (exatamente).
O trabalho DEVE ser feito em equipes de 2 (dois) ou 3 (três) alunos de graduação ou por 1 (um) aluno do mestrado.
Aqui estão as especificações dos problemas.
Em todos os problemas cada grafo será descrito em um arquivo de texto contendo a representação através de uma matriz de adjacências. Uma e somente uma quebra de linha do arquivo separa duas linhas da matriz, não havendo separação entre as colunas. Considere que o conjunto de vértices são os números inteiros de 1 a n, onde n é o número de linhas da matriz.
Por exemplo, o texto abaixo representa o grafo completo com 3 vértices.
011 101 110
Dado um grafo G encontrar um conjunto X de vértices de G tal que todas as arestas tenham pelo menos um extremo em X e |X| seja mínimo.
Dado um grafo G e um parâmetro inteiro k, com 0 < k < n, encontrar um conjunto X de vértices de G tal que, para cada par de vértices u e v de X, a distância entre u e v em G é no máximo k e |X| seja máximo.
Dado um grafo G e um parâmetro k, inteiro positivo, determinar se G é um grafo k-conexo.
Dado um grafo G determinar o menor número de cruzamentos de arestas que um desenho de G pode ter.
Dados dois grafos, determinar se são isomorfos ou não.