Ir ao conteúdo

[Finalizado] Labirinto em C... como achar a saida


Cafofoman

Posts recomendados

Postado

Pessoal, já procurei aqui e nao consegui progredir...

bem, estou fazendo um trabalho da faculdade, mas infelizmente, mesmo procurando no google, nao encontrei algo que me ajudasse a entender o conceito de pilhas. Bem, o que preciso fazer é o seguinte:

- ler a primeira linha do arquivo txt, e carregar nos campos linhas e colunas (definidos no TAD) (já fiz)

- Ler a partir da terceira linha o esquema do labirindo e apresentar na tela, sendo 0=parede e 1=passagem (já fiz)

estrutura do arquivo:

3 4

1 0 0 0

0 1 1 0

0 0 0 1

Agora, preciso contruir um Tadpilha que me permita ler os dados do labirinto a partir de (0,0) e ir percorrendo o labirinto e achar a solucao, e ir escrevendo em um txt, neste caso a saida seria algo assim:

(0,0)

(1,1)

(1,2)

(2,3)

eu realmente nao consigui entender o empilha e desempilha e propriamente dizendo, como chegar se o proximo caracter eu tenho que empilhar ou não.

abaixo o codigo para o labirinto, se alguem puder me dar uma luz...

-----------labirinto.c (parcial) ----------------------------

int caminhaNoLabirinto(TadLabirinto * lab, solucao * caminho ){

char str[1];

solucao p;

Elemento e;

inicializaPilha(&p);

FILE *fp;

int i=0, vr, ln=1, cl=1;

int linhas, colunas;

linhas = lab->numero_linhas;

colunas = lab->numero_colunas;

//abre o arquivo para leitura

fp = fopen("labirinto.txt", "r");

// Cristiano: alterei para emitir uma mensagem caso nao consiga abrir o arquivo

if(!fp){

printf("\nNão foi possível abrir o arquivo!");

return 1; // problemas na leitura ou arquivo nao encontrado

}

/*for(i=0;i<10;i++) {

empilha(&p,i);

}

while(pilhaVazia(p)==FALSE){

e = desempilha(&p,i);

printf("%d\n",e);

}

printf("Terminou ok.\n");

*/

while(fscanf(fp, "%s", str) == 1) //le o arquivo e coloca um numero embaixo do outro

{

// divide por '\n' se existir

int len = strlen(str)-1;

if(str[len] == '\n')

str[len] = 0;

if (i>1){

vr=atoi(str);//converto str para inteiro

if (vr==PASSAGEM)

printf("(%d,%d)\n", ln-1,cl-1);

if (cl==colunas){

printf("\n"); //mudo de linha

cl=0; // zero o contador de colunas

ln++; //incremento a linha

}

cl++; //incremento a coluna

}

/*for(ln=0; ln<linhas; ln++)

{

for(int cl=0; cl<colunas; cl++)

{

char ch;

char end;

fscanf(fp, "%c", &ch);

//end = ln&cl;

//empilha(p, end);8

//if (ch=="1")

// next;

//else

// desempilha(p, ch)

printf("caracter.....: %s\n", ch);

}

}*/

/* empilha(&p,str);

mostratopo(p);*/

i++; //incrementa numero total de linhas

//}

}

fclose(fp); //fecha o arquivo

return 1;

}

especificamente, estou com problemas em entender como vou ler o arquivo a partir da segunda linha, e empilhar cada item verificando para qual lado tem saida (numero 1), e ir marcando as coordenadas, até chegar a saida. tenho que implementar isso na funcao caminhaNoLabirinto

Postado

Coloca seu código dentro de

Spoiler

e dentro de

CODE

pra facilitar a visualização.

Você está com dificuldade para entender o conceito de pilhas?

Postado

Massita, obrigado por responder... realmente nao estou conseguindo abstrair o conceita na aplicacao especifica do trabalho, pois tenho que empilhar, verificar se o proximo numero é 0 ou 1, se for 1, mantem empilhado, se for zero desempilhar e parte pro proximo, quando empilhar, preciso registrar a coordenada num arquivo txt. sds

Postado

Obrigado pelas colaboracoes, mas o prazo para finalizar o exercicio já terminou e como só consegui realizar metade do exercicio, receberei metade da nota... :(

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!