Ir ao conteúdo
  • Cadastre-se

Limitar uma matriz de labirinto (C++)


Isis Gomes

Posts recomendados

Bom pessoal no meu código eu recebo uma matriz NxN informada pelo usuário. Nessa matriz o A é um robo, o # é obstáculo, "." é espaço livre e X é o alvo/saída

É como se o usuário desafiasse o código

Meu código estúpido gera um número aleatório de 1 a 4 (os mov cima baixo esquerda ou direita) e move o A loucamente até chegar no X

Um dos bugs é: ele simplesmente chega no X de qualquer forma, deveria ser o menor caminho possível.

 

Mas o que eu quero saber é uma lógica pra limitar essa matriz porque esses movimentos aleatório estão passando do tamanho dela Oo

por ex: se meu A tá na pos (0,0), tecnicamente não poderia nem "cima" nem "esquerda", porém acontece isso :/

 

Me ajudem, por favor.

Link para o comentário
Compartilhar em outros sites

Você pode criar uma função que faz a checagem da posição antes de mover e usar ela antes de qualquer movimento.

bool checaMovimento( int x, int y ) {    if (x >= N || x < 0) return false;    if (y >= N || y < 0) return false;    return true;} void movimentaRobot( int x, int y ) {    if ( checaMovimento( x, y ) ) {        // faz a movimentação aqui    }}
Link para o comentário
Compartilhar em outros sites

OK!
Eu achei interessante, então fiz um pra mim também

 

* O fato do robô ficar saltitando é por conta da pseudo aleatoriedade, você pode usar ponteiros

temporários para guia-los pelos erros; 

 

* Segue um parte do algoritmo que fiz para esse ponto;

   // Define-se CIMA(1)    como sendo --x;             //   // Define-se BAIXO(2)   como sendo ++x;             //   // Define-se ESQUERDA(3)como sendo --y;             //   // Define-se DIREITA(4) como sendo ++y;             //   // A Lógica nos fala que:                           //   // O menor índice de um vetor é 0                   //   // O maior índice de um vetor é Tam -1;             //   // Se o tamanho for n, índice é n = n -1;           //    switch( rand()%5 /* sorteio de [1, 2, 3 ou 4] */)  //    {     case 1: if( x > 0) --x;break;// Se == 0 faz nada //     case 2: if( x < n) ++x;break;// n e o limite     //     case 3: if( y > 0) --y;break;// Se == 0 faz nada //     case 4: if( y < n) ++y;break;// n e o limite     //    }
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Finalmente tive tempo para terminar o Meu Robozinho ele está pronto!
Usando um função que chamei de QuenteFrio, ele chegou muito rápido ao destino X, muito sem graça.

Usando rand() é bem mais legal! Fica com rand() que ele sofre mais!

 

Observe que ele repetiu as mesmas coordenadas erradas +1000 vezes, até  que, encontra o destino correto, batendo com a cara

nas paredes ate chegar no 'X'
:D kkkkk;

Programa_C_Mauro_Britivaldo_Forca_Bruta.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...