Buscar

Como implementar um labirinto com Fila Circular??

Pessoas, preciso de um ajuda na implementação do calculo de distancias entre pontos em um labirinto por fila circular, onde no código calculamos a menor distancia desses pontos, tudo em uma matriz. Se alguém tiver algum código pronto agradeço muito, da mesma forma se houver algum algoritmo bem explicado. Valeu, pessoal.. abz

💡 6 Respostas

User badge image

Allan David

Infelizmente não consegui entender direito como você quer usar a fila-circular.
Porém, se com fila-circular você quer dizer que para cada lugar do seu labirinto você criou uma estrutura que liga esse lugar aos próximos válidos usando ponteiros, então o que você tem é um grafo. Sendo assim, você deveria usar uma busca. Recomendo que procure sobre busca em largura ou busca em profundidade, são simples de aprender e fáceis de implementar.
Espero ter te respondido, mas se não era nada disso que você queria saber, descreva melhor como você quer utilizar essa matriz junto com uma fila-circular pra resolver isso.
Abraços.

1
Dislike0
User badge image

Lorrene Stacy

Então, o enunciado é esse:

Imagine um labirinto quadrado, como abaixo, a sua tarefa é escrever um programa em Java que tendo como entrada um labirinto informado por arquivo, encontra o caminho mais curto entre um ponto inicial ae o ponto final b.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Para auxiliá-lo na solução desse problema, abaixo é apresentado um algoritmo que calcula a distância de um ponto inicial no labirinto para todos os seus vizinhos (acima, abaixo, a esquerda e a direita). O Algoritmo utiliza uma fila como estrutura de dados, no seu programa você deverá utilizar uma TAD Fila Circular, conforme vista em sala de aula.

 

1. Numerar todos os vizinhos do ponto inicial com 1.

2. Colocar os vizinhos em uma fila.

3. Enquanto a fila não estiver vazia e não se tiver atingido o ponto de destino:

(a) Retirar um ponto da fila;

(b) Numerar os seus vizinhos livres com o número do ponto acrescido de 1; e

(c) Colocar os novos pontos (vizinhos) na fila.

4. Se a fila estiver vazia e não se tiver atingido o ponto de destino, não existe percurso. Caso contrário, imprimir o percurso.

 

Entrada do Programa

O labirinto será modelado como uma matriz NxN, com as posições livres marcadas com 0 e as posições bloqueadas com –1, assim o arquivo de entrada teria na primeira linha um número inteiro representando o N, em seguida são informados os valores para as posições da matriz:

 

7

0   0 –1  0  0 0 0

0   0 –1 –1  0 0 0

0   0  0  0  0 0 0

0   0  0 –1 –1 0 0

–1  0  0  0 –1 0 0

–1 –1 –1  0  0 0 0

–1 –1 –1  0  0 0 0

 

Após a leitura do arquivo o seu programa deve solicitar, pelo teclado, o ponto inicial a e ponto final b, ao final o seu programa apresenta qual é o caminho mais curto de a até b.

Exemplo:

Considere a matriz abaixo, e o ponto a em [2][1] e o ponto b em [4][5], teríamos nas primeiras interações do algoritmo as seguintes matrizes.

 

0

1

2

3

4

5

6

0

0

0

–1

0

0

0

0

1

0

0

–1

–1

0

0

0

2

0

a

0

0

0

0

0

3

0

0

0

–1

–1

0

0

4

–1

0

0

0

–1

b

0

5

–1

–1

–1

0

0

0

0

6

–1

–1

–1

0

0

0

0

 

Na primeira iteração do algoritmo teríamos, considerando que na retiramos da Fila [2][1] e inserimos na fila os seus vizinhos [1][1], [2][0], [2][2] e [3][2]:

 

0

1

2

3

4

5

6

0

0

0

–1

0

0

0

0

1

0

1

–1

–1

0

0

0

2

1

a

1

0

0

0

0

3

0

1

0

–1

–1

0

0

4

–1

0

0

0

–1

b

0

5

–1

–1

–1

0

0

0

0

6

–1

–1

–1

0

0

0

0

 

Na segunda iteração do algoritmo retiramos da fila [1][1] e inserimos na fila os seus vizinhos [0][1] e [1][0], assim a fila terá  [2][0], [2][2], [3][2], [0][1], [1][0] :

 

0

1

2

3

4

5

6

0

0

2

–1

0

0

0

0

1

2

1

–1

–1

0

0

0

2

1

a

1

0

0

0

0

3

0

1

0

–1

–1

0

0

4

–1

0

0

0

–1

b

0

5

–1

–1

–1

0

0

0

0

6

–1

–1

–1

0

0

0

0

 

Na terceira iteração do algoritmo retiramos da fila [2][0] e inserimos na fila o seu vizinho que ainda não foi visitado [3][0], assim a fila terá  [2][2], [3][2], [0][1], [1][0], [1][0], [3][0] :

 

0

1

2

3

4

5

6

0

0

2

–1

0

0

0

0

1

2

1

–1

–1

0

0

0

2

1

a

1

0

0

0

0

3

2

1

0

–1

–1

0

0

4

–1

0

0

0

–1

b

0

5

–1

–1

–1

0

0

0

0

6

–1

–1

–1

0

0

0

0

 

O algoritmo se repete até que se tenha toda a matriz preenchida.

0
Dislike0
User badge image

Lorrene Stacy

Viu, o labirinto é uma matriz. Desculpe se não ficou muito claro. É que o exercício em si, pelo menos pra mim, é complicado, imagine pra explicá-lo. Qualquer ajuda é bem-vinda. ^^

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais

Outros materiais