Cyberlacs 0 Denunciar post Postado Abril 10, 2014 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
_Isis_ 202 Denunciar post Postado Abril 14, 2014 http://larc.unt.edu/ian/pubs/algoknight.pdf Compartilhar este post Link para o post Compartilhar em outros sites