Вы находитесь на странице: 1из 4

UNIVERSIDADE FEDERAL DE MINAS GERAIS

Departamento de Cincia da Computao Disciplina


Algoritmos e Estruturas de Dados II

Curso

Turmas

Perodo
2

Professores

Camilo Oliveira, Gisele Pappa, talo Cunha, Loc Cerf, William Schwartz
Trabalho Prtico 1 - Labirinto
Data de entrega: 20/04/2012 (no haver adiamento) Valor: 10 pontos + 2 extras

Considere o seguinte problema:

Um rato tentando sair de um labirinto.

O rato percorre um labirinto em busca da sada, e no caminho coleta pedaos de queijo. Para cada posio, o rato pode ir em uma dentre quatro posies: direita, esquerda, para cima e para baixo. O labirinto implementado como uma matriz de caracteres bidimensional, na qual as passagens so marcadas com o caractere numrico 0 (zero), as paredes com o caractere numrico 1 (um), a posio de sada com o caractere maisculo S , as posies com queijo com o caractere maisculo Q, a localizao inicial do rato indicada pelo caractere minsculo i. O labirinto todo cercado por paredes (dgitos 1), exceto na localizao da sada. Os labirintos sero armazenados em arquivos de extenso .txt e podem ter tamanhos diferentes. Esses arquivos, quando lidos, devem ser armazenados em matrizes. Um exemplo do arquivo de entrada mostrado a seguir. Os dois primeiros nmeros do arquivo contm o nmero de linhas e colunas da matriz, respectivamente. Observao: o caractere \n no deve ser lido para a matriz que armazenar o labirinto.
5 5 11111 1i0Q1 11101 SQ0Q1 11111 40 13 1111111111111111111111111111111111111111 1i00000000000000Q00000000000100010000001 1010101010110101011111101010001010101101 101011111011010100000010101010000000000S 1010001010111101011110000000110101011101 1011111100000110100000011110110101010101 1011111111111101011111111110110101110101 101000000000000Q0000000000100000Q0000001 1011011010101010101010101010111010101101 1010001000100001000010000010101000101101 1010111111111111111111111110101110111101 100000000000001Q000000100000100000000001 1111111111111111111111111111111111111111

O que deve ser feito

1. Implementar um programa em linguagem C capaz de fazer um rato percorrer um labirinto e encontrar a sada. 2. O programa deve receber pelo prompt do sistema operacional (linha de comando) o nome do labirinto e o tipo do cenrio, com o seguinte formato:
./executavel <arquivo .txt contendo o labirinto> <arquivo de sada>

3. A sada do programa deve seguir a seguinte especicao: O programa gera um arquivo de sada, com nome especicado pela linha de comando, com o formato mostrado abaixo. passos indica o nmero de passos que foram percorridos ao todo durante a busca pela sada, n indica o comprimento do caminho at a sada (nmero de passos a partir da posio inicial at a sada do labirinto), xi , yi denotam as coordenadas que compem o caminho entre a posio inicial e a sada, e queijos indica o nmero de queijos encontrados no caminho (no na busca toda, apenas no caminho encontrado para sair do labirinto). Todas essas informaes devem estar contidas no arquivo de sada. m p a s s o s no t o t a l n p a s s o s para s a i d a x1 , y1 x2 , y2 ... xn , yn j q u e i j o s encontrados Por exemplo, a saida para o primeiro arquivo de entrada mostrado anteriormente deve ser similar sada abaixo. Note que neste exemplo apenas o primeiro nmero impresso, o nmero de passos, depende do mtodo de busca implementado. Todos os outros valores so xos.
7 7 1 1 1 2 3 3 3 3 passos no total passos ate a saida 1 2 3 3 3 2 1 queijos encontrados

4. Como no TP0, todas as funes devem ser precedidas por comentrios. Neste trabalho, o arquivo labirinto.h a ser utilizado ser disponibilizado juntamente com a especicao do trabalho. Portanto, as funes, cujos prottipos esto no labirinto.h, devem ser criadas e desenvolvidas no arquivo labirinto.c. Os TADs e as funes a implementar so:
struct percurso { /* numero total de movimentos durante a busca */ int passos; /* sequencia de posicoes ate a saida */ struct posicao **posicoes;

};

/* numero de elementos em **posicoes */ int comprimento; /* numero de queijos no percurso em **posicoes */ int queijos;

struct labirinto { // 'i'=inicio, '0'=livre, '1'=parede, 'Q'=queijo, 'S'=saida char *mapa; int colunas; /* mapa[colunas*x + y] */ int linhas; }; struct posicao { int x; int y; }; struct labirinto * carrega_labirinto(char *nome_arquivo); void libera_labirinto(struct labirinto *lab); char inspeciona(struct labirinto *lab, struct posicao *pos); struct posicao * coordenada_inicial(struct labirinto *lab); struct posicao * cria_posicao(int x, int y); void libera_posicao(struct posicao *pos); struct percurso * acha_saida(struct labirinto *lab, struct posicao *pos); void imprime_percurso(struct percurso *perc, char *nome_arquivo); void libera_percurso(struct percurso *perc);

5. Analise a complexidade de algoritmo proposto e adicione na documentao a ser entregue.


Crdito Extra

O trabalho receber crdito extra nos seguintes casos.


Trabalho esteja acompanhado da implementao de interface grca para o labirinto utilizando a biblioteca Allegro (http://alleg.sourceforge.net/). Detalhes da interface grca bem como screeshots

devem ser apresentados na documentao. (1pt extra)

Solues utilizando heursticas que resolvam o problema com custo computacional reduzido (a heurstica

utilizada deve ser explicada em detalhes na documentao. (1pt extra)

O que deve ser entregue

Cdigo fonte do programa em C (todos os arquivos .c e .h), bem identada e comentada, conforme

especicado acima.

Documentao sobre o trabalho (em .pdf), incluindo as decises tomadas relativas aos casos e detalhes

de especicao que porventura estejam omissos no enunciado. Um exemplo de documentao pode ser encontrado no Moodle. Porm, ela deve conter, entre outras coisas:

1. Introduo: descrio sucinta do problema a ser resolvido e viso geral sobre o funcionamento do programa.

2. Implementao: descrio sobre a implementao do programa. Deve ser detalhada a estrutura de dados utilizada (de preferncia com diagramas ilustrativos), o funcionamento das principais funes e procedimentos utilizados, o formato de entrada e sada de dados, compilador utilizado, bem como decises tomadas relativas aos casos e detalhes de especicao que porventura estejam omissos no enunciado. 3. Estudo de Complexidade: estudo da complexidade do tempo de execuo dos procedimentos implementados e do programa como um todo (notao O), considerando conjuntos de tamanho n. 4. Testes: descrio dos testes realizados e listagem da sada (no edite os resultados). 5. Concluso: comentrios gerais sobre o trabalho e as principais diculdades encontradas em sua implementao. 6. Bibliograa: bibliograa utilizada para o desenvolvimento do trabalho, incluindo sites da Internet se for o caso.
O trabalho ser entregue atravs do sistema de submisso de trabalhos prticos: http://aeds.dcc. ufmg.br, em um arquivo compactado (.zip) contendo os arquivos fonte (arquivo .c, o arquivo .h, o

main.c, e arquivos com a interface grca para aqueles que decidirem criar a interface utilizando a biblioteca Allegro). O a documentao deve ser enviada em pdf, no link especial para sua submisso no sistema.

Comentrios gerais

Comece a fazer este trabalho logo, enquanto o prazo para termin-lo est to longe quanto jamais

poder estar.

Clareza, indentao e comentrios no programa tambm vo valer pontos. Trabalhos copiados sero penalizados com a nota zero. O trabalho individual. Penalizao por atraso: (2d - 1) pontos, onde d o nmero de dias de atraso.

Вам также может понравиться