Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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) (*linha) = *linha+2. (*coluna) = *coluna+1. return 1. } } return 0. } int ehPossivel_2(TpPilha p, int linha, int coluna) (*linha) = *linha+1. (*coluna) = *coluna+2. return 1. } } return 0. } int ehPossivel_3(TpPilha p, int linha, int coluna) (*linha) = *linha+2. (*coluna) = *coluna-1. return 1. } } return 0. } int ehPossivel_4(TpPilha p, int linha, int coluna) (*linha) = *linha-2. (*coluna) = *coluna+1. return 1. } } return 0. } int ehPossivel_5(TpPilha p, int linha, int coluna) (*linha) = *linha-2. (*coluna) = *coluna-1. return 1. } } return 0. } int ehPossivel_6(TpPilha p, int linha, int coluna) (*linha) = *linha-1. (*coluna) = *coluna-2. return 1. } } return 0. } int ehPossivel_7(TpPilha p, int linha, int coluna) (*linha) = *linha+1. (*coluna) = *coluna-2. return 1. } } return 0. } int ehPossivel_8(TpPilha p, int linha, int coluna) (*linha) = *linha+2. (*coluna) = *coluna-1. return 1. } } return 0. } void ocupaPosicao(TpPilha p, int linha, int coluna) 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]. } (*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). }
}Carregando comentários...