Ir para conteúdo

Arquivado

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

Cyberlacs

Passeio do cavalo fiz com estratégia de força bruta, não é certo kkk

Recommended Posts

Este é um trabalho que entreguei hoje 10/04/2014 e não gostei do resultado pois a minha lógica foi feita através de força bruta, mas sei que tem soluções matemáticas para isso, eu até pesquisei na internet mas não tem muita discussão referente a este assunto, gostaria de aprender como fazer esta solução.

 

Neste trabalho foi usado um arquivo .h que é responsável por guardar as posições visitadas em um pilha, abaixo segue em sequência os arquivos.

 

Gostaria que alguém me explicasse o calculo, para eu ver se consigo fazer.

 

Agradeço

 

passeioDoCavalo.cpp

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio2.h>
#include <time.h>
#include "pilha_int.h"

int tabuleiro[8][8];
int cont;

void inicializaTabuleiro()
{
     for(int i =0; i < 8; i++)
       for(int j =0; j < 8; j++)
         tabuleiro[i][j] = '0';  
}

void exibeTabuleiro() // exibe tabuleiro
{     
      int i=0, j=0; 
      for( ; i < 8; i++)
      {
           if(j == 8)
                printf("\n");
           j =0;
           for(; j < 8; j++)
           {
              if(tabuleiro[i][j]== 'C')
              {
                  textcolor(2); 
                  printf("[%c]", tabuleiro[i][j]); 
              }
              else
              {
                  if(tabuleiro[i][j]== '0')
                  {
                      textcolor(15);
                      printf("[%c]", tabuleiro[i][j]); 
                  }
                  else
                  {
                      textcolor(12);
                      printf("[%c]", tabuleiro[i][j]); 
                  }
              }
           }
      }
}

int verificaOcupado(int linha, int coluna)
{
     if(tabuleiro[linha][coluna] == '0')
        return 1;//Retorna posição liberada
     else
        return 0;
}

int ehPossivel_1(TpPilha p, int *linha, int *coluna)
{
    if((*linha+2 < 8) && (*coluna+1 < 8))
    {
       if(verificaOcupado(*linha+2, *coluna+1) == 1)//Se estiver vazio insere cavalo na posição
       {
			(*linha)  = *linha+2;
			(*coluna) = *coluna+1;
			
       		return 1;
	   }
    }
	
	return 0;
}

int ehPossivel_2(TpPilha p, int *linha, int *coluna)
{
    if((*linha+1 < 8) && (*coluna+2 < 8))
    {
       if(verificaOcupado(*linha+1, *coluna+2) == 1)//Se estiver vazio insere cavalo na posição
       {
       		(*linha)  = *linha+1;
			(*coluna) = *coluna+2;
			
			return 1;
	   }
    }
    
    return 0;
}

int ehPossivel_3(TpPilha p, int *linha, int *coluna)
{
    if((*linha+2 < 8) && (*coluna-1 >= 0))
    {
       if(verificaOcupado(*linha+2, *coluna-1) == 1)//Se estiver vazio insere cavalo na posição
       {
       		(*linha)  = *linha+2;
			(*coluna) = *coluna-1;
			
       		return 1;
	   }
    }
    
	return 0;
}

int ehPossivel_4(TpPilha p, int *linha, int *coluna)
{
    if((*linha-2 >= 0) && (*coluna+1 < 8))
    {
		if(verificaOcupado(*linha-2, *coluna+1) == 1)//Se estiver vazio insere cavalo na posição
       	{
       		(*linha)  = *linha-2;
			(*coluna) = *coluna+1;
			
			return 1;
	   	}
    }
    
	return 0;
}

int ehPossivel_5(TpPilha p, int *linha, int *coluna)
{
    if((*linha-2 >= 0) && (*coluna-1 >= 0))
    {
       if(verificaOcupado(*linha-2, *coluna-1) == 1)//Se estiver vazio insere cavalo na posição
	   {	
	   		(*linha)  = *linha-2;
			(*coluna) = *coluna-1;
			
       		return 1;
	   }
    }
    
	return 0;
}

int ehPossivel_6(TpPilha p, int *linha, int *coluna)
{
    if((*linha-1 >= 0) && (*coluna-2 >= 0))
    {
       if(verificaOcupado(*linha-1, *coluna-2) == 1)//Se estiver vazio insere cavalo na posição
	   {
	   		(*linha)  = *linha-1;
			(*coluna) = *coluna-2;
			
       		return 1;
	   }
    }
	
	return 0;
}

int ehPossivel_7(TpPilha p, int *linha, int *coluna)
{
    if((*linha+1 < 8) && (*coluna-2 >= 0))
	{
       if(verificaOcupado(*linha+1, *coluna-2) == 1)//Se estiver vazio insere cavalo na posição
	   {
	   		(*linha)  = *linha+1;
			(*coluna) = *coluna-2;
			
       		return 1;
	   }
    }
    
	return 0;
}

int ehPossivel_8(TpPilha p, int *linha, int *coluna)
{
    if((*linha+2 < 8) && (*coluna-1 >= 0))
    {
       if(verificaOcupado(*linha+2, *coluna-1) == 1)//Se estiver vazio insere cavalo na posição
	   {
	   		(*linha)  = *linha+2;
			(*coluna) = *coluna-1;
			
			return 1;
	   }
    }
	    
   	return 0;
}

void ocupaPosicao(TpPilha p, int linha, int coluna)
{
     if(verificaOcupado(linha, coluna) == 0)
     {
         tabuleiro[linha][coluna] = 'C';
         
         Insere(p, linha, coluna);  
     }
}

void jogo()
{
	TpPilha p;
	int linha = rand()%7, coluna = rand()%7;
	int ultimo = 0;
	int desliga = 0;
	
	Inicializa(p);
	Insere(p, linha, coluna);
	tabuleiro[linha][coluna] = 'C';
	
	while(!Cheia(p.topo))
	{
		if(ehPossivel_1(p, &linha, &coluna) == 1 && desliga != 1)
		{
			tabuleiro[linha][coluna] = 'C';
         	Insere(p, linha, coluna);
         	ultimo = 1;
		}else
		if(ehPossivel_2(p, &linha, &coluna) == 1 && desliga != 2)
		{
			tabuleiro[linha][coluna] = 'C';
         	Insere(p, linha, coluna);
         	ultimo = 2;
		}else
		if(ehPossivel_3(p, &linha, &coluna) == 1 && desliga != 3)
		{
			tabuleiro[linha][coluna] = 'C';
         	Insere(p, linha, coluna);
         	ultimo = 3;
		}else
		if(ehPossivel_4(p, &linha, &coluna) == 1 && desliga != 4)
		{
			tabuleiro[linha][coluna] = 'C';
         	Insere(p, linha, coluna);
         	ultimo = 4;
		}else
		if(ehPossivel_5(p, &linha, &coluna) == 1 && desliga != 5)
		{
			tabuleiro[linha][coluna] = 'C';
         	Insere(p, linha, coluna);
         	ultimo = 5;
		}else
		if(ehPossivel_6(p, &linha, &coluna) == 1 && desliga != 6)
		{
			tabuleiro[linha][coluna] = 'C';
         	Insere(p, linha, coluna);
         	ultimo = 6;
		}else
		if(ehPossivel_7(p, &linha, &coluna) == 1 && desliga != 7)
		{
			tabuleiro[linha][coluna] = 'C';
         	Insere(p, linha, coluna);
         	ultimo = 7;
		}else
		if(ehPossivel_8(p, &linha, &coluna) == 1 && desliga != 8)
		{
			tabuleiro[linha][coluna] = 'C';
         	Insere(p, linha, coluna);
         	ultimo = 8;
		}
		else
		{
			int x = rand()%100;
				if(x%10 == 0)
				{
				  x=rand()%9+1;
		       	while(x > 0)
			     {
			
			    	Retira(p, &linha, &coluna);
				   tabuleiro[linha][coluna] = '0';
				
			     	x--;
		     	}
		     }
		     else
		     {
		     		Retira(p, &linha, &coluna);
				   tabuleiro[linha][coluna] = '0';
		     }
			
			desliga = rand()%9+1;
		}
		
		//if(cont == 8)
		//{
			//gotoxy(10, 20); printf("Saindo");
			//Retira2(p);
		//}
			
		system("cls");
		exibeTabuleiro();
		
		ElementoTopo(p, &linha, &coluna);
		
		printf("%d - %d", ultimo);
		//_sleep(300);
	}
	
	
}

int main()
{
    //TpPilha p;
    
    //Inicializa(p);
    
    //Insere(p, 9, 8);
    ///Exibe(p);
    srand(time(0));
    
    inicializaTabuleiro();
    
    jogo();

	getch();	
}

pilha_int.h

#define MAXPILHA 64

struct TpPilha
{
    int topo;
    int pilha[MAXPILHA][MAXPILHA];
};

void Inicializa(TpPilha &p)
{
    p.topo = 0;
}

/*int ElementoTopo(TpPilha p)
{
    return p.pilha[p.topo][p.topo];
}
*/

void ElementoTopo(TpPilha p, int *linha, int *coluna)
{
    (*linha)  = p.pilha[--p.topo][0];
    (*coluna) = p.pilha[p.topo][1];
}

int Vazia(int t)
{
    if(t == 0)
        return 1;
    else
        return 0;
}

int Cheia(int t)
{
    if(t == MAXPILHA-1)
        return 1;
    else
        return 0;
}

void Insere(TpPilha &p, int linha, int coluna)
{
     p.pilha[p.topo][0] = linha;
     p.pilha[p.topo++][1] = coluna;
}

void Retira(TpPilha &p, int *linha, int *coluna)
{
    (*linha)  = p.pilha[--p.topo][0];
    (*coluna) = p.pilha[p.topo][1];
}

void Retira2(TpPilha &p)
{
    p.pilha[--p.topo][0];
    p.pilha[p.topo][1];
}

void Exibe(TpPilha p)
{
     int linha = 0, coluna = 0;
    while(!Vazia(p.topo))
    {
         Retira(p, &linha, &coluna);        
        printf("\n%d - %d",linha ,coluna);
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.