Ir ao conteúdo
  • Cadastre-se
Isis Gomes

Limitar uma matriz de labirinto (C++)

Recommended Posts

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.

Compartilhar este post


Link para o post
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    }}

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×