Passeio do cavalo fiz com estratégia de força bruta, não é certo kkk
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). }
}Discussão (1)
Carregando comentários...