Buscar

Trabalho - Donzela presa

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
/*Definicao das cores pelo console*/
#define VERMELHO "\e[41m \e[49m"
#define AZUL "\e[44m \e[49m"
#define CIANO "\e[46m \e[49m"
#define CINZA "\e[47m \e[49m"
struct tnode{
	char matriz [20];
	char expandir;
	struct tnode *noPai;
	struct tnode *no1;
	struct tnode *no2;
	struct tnode *no3;
	struct tnode *no4;
	struct tnode *no5;
	struct tnode *no6;
	struct tnode *no7;
	struct tnode *no8;	
	};
	
struct tnode1{
	char matriz [20];
	struct tnode *noPai;
	struct tnode *no1;
	};
	
	
/*declaracao da variavel da raiz da arvore*/
struct tnode *arvoresol;
/*declaracao das funcoes utilizadas*/
void analise (struct tnode *arvoreroot,struct tnode *arvore,int AchouSolucao,FILE *pa);
void addtree (struct tnode *arvore,char matrizTabuleiro[], char blnExpandir, int no);
char* movimentosPosiveis (char matrizTabuleiro []);
int varrerArvore(struct tnode *arvore,char matrizTabuleiro[]);
void CaminhoSolucao(struct tnode *arvore,FILE *pa) ;
void ImprimirTabuleiro21(char matrizTabuleiro[]);
void imprimir (char matriz[]);
/*Funcaoo principal do programa*/
int main ()
{
	int MAX=20;
	/*Configuracao da matriz inicial do jogo*/
	char matrizTabuleiroInicial [20] = {'q','p','p','q','q','p','p','q','q','q','q','q','q','q','q','q','q','v','v','q'};
	char linha[MAX];
	FILE *pa;
 char *nome = "texto.txt";
	struct tnode *arvoreroot;
	
	/*Seto o valor da variavel como nulo*/
	arvoreroot = NULL;
	
	/*Adiciono a matriz inicial na arvore*/
	addtree(arvoreroot,matrizTabuleiroInicial,'E',0);
	
	
	/* Abre o arquivo para leitura e escrita */
 if (( pa = fopen(nome, "w+")) == NULL) {
 printf("\n\nNao foi possivel abrir o arquivo.\n");
 exit(1);
 }
	/* chamo a funcao de analise da arvore*/
	analise(arvoreroot,arvoreroot,1,pa);
	
	/*Leio cada linha do arquivo e mando imprimir-la*/
	while (!feof(pa)) {
 fgets(linha, MAX, pa);
		 ImprimirTabuleiro21(linha);
		 sleep(1);
 }
	
	/*fecho o arquivo*/
 fclose(pa);
	
	return 0;
}
/*Funcao de analise do programa*/
void analise (struct tnode *arvoreroot,struct tnode *arvore,int AchouSolucao,FILE *pa)
{
	/* declaracao de variaveis*/
	char matrizMovimentoPosiveis[20];
	char matrizTabuleiro [20];
	int i,count,retorno;
	
	/* Esquema da configuracao final do jogo para verificacao se o programa ja chegou na solucao*/
	char matrizTabuleiroFinal [20] = {'q','q','q','q','q','q','q','q','q','p','p','q','q','p','p','q','q','v','v','q'};
	
	/*inicializo a variavel do contador auxiliar; essa variavel indica o numero de possibilidades...*/
	/* o count sao vai ate 8*/
	count=0;
	/*memset (matrizMovimentoPosiveis,0,20);*/
	
	if (arvore!=NULL)
	{
		/*verifico se a matriz eunica e se nao foi encontrada a solucao*/
		if (arvore->expandir=='E' && AchouSolucao!=0)
		{
			/*copio a matriz do no para uma variavel*/
			strcpy(matrizTabuleiro,arvore->matriz);
							
			/*Ando por todas as casas do tabuleiro procurando um espacao vazio*/
			for (i=0;i<=19;i++)
			{
			
				/* verifico se achei um espacao vazio*/
				if (matrizTabuleiro[i]=='v')
				{
			
					/*Testo as possibilidades de movimentos com os quadrados irmaos*/
					if ((i-1)>=0)
					{
						if (matrizTabuleiro[i-1]=='q')
						{
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
						
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i]='q';
							matrizMovimentoPosiveis[i-1]='v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/
							retorno = varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final*/
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
						}
					}
				
				
					if ((i+1)<=19)
					{
						if (matrizTabuleiro[i+1]=='q')
						{
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecas*/
							matrizMovimentoPosiveis[i]='q';
							matrizMovimentoPosiveis[i+1]='v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno = varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final*/
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico
se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
						}
					}
				
					if ((i-4)>=0)
					{
						if (matrizTabuleiro[i-4]=='q')
						{
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i] = 'q';
							matrizMovimentoPosiveis[i-4] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno=varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final*/
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
						}
					}
					
				
					if ((i+4)<=19)
					{ 
						if (matrizTabuleiro[i+4]=='q')
						{
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
						
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i] = 'q';
							matrizMovimentoPosiveis[i+4] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno = varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final*/
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							/*Somo mais um na variavel */
							count ++;
						}
					}
				
					/*Testo as possibilidades de movimentos com a princesa*/
					if ((i+9)<=19)
					{
						if ((matrizTabuleiro[i+4]='p') && (matrizTabuleiro[i+1]='v') && (matrizTabuleiro[i+5]='p'))
						{
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i] = 'p';
							matrizMovimentoPosiveis[i+1] = 'p';
							matrizMovimentoPosiveis[i+8] = 'v';
							matrizMovimentoPosiveis[i+9] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno = varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final*/
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
						}
					}
					
					if (((i+8)<=19) && ((i-1)>=0))
					{
						if ((matrizTabuleiro[i+4]='p') && (matrizTabuleiro[i-1]='v') && (matrizTabuleiro[i+3]='p'))
						{
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i-1] = 'p';
							matrizMovimentoPosiveis[i] = 'p';
							matrizMovimentoPosiveis[i+7] = 'v';
							matrizMovimentoPosiveis[i+8] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno = varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final*/
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
						}
					}
					
					if (((i-2)>=0) && ((i+4)<=19))
					{
						if ((matrizTabuleiro[i-1]='p') && (matrizTabuleiro[i+3]='p') && (matrizTabuleiro[i+4]='v'))
						{
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i] = 'p';
							matrizMovimentoPosiveis[i+4] = 'p';
							matrizMovimentoPosiveis[i+2] = 'v';
							matrizMovimentoPosiveis[i-2] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno=varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final	*/						
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
							
						}
					}
					
					if ((i-6)>=0)
					{
						if ((matrizTabuleiro[i-1]='p') && (matrizTabuleiro[i-5]='p') && (matrizTabuleiro[i-4]='v'))
						{
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i] = 'p';
							matrizMovimentoPosiveis[i-4] = 'p';
							matrizMovimentoPosiveis[i-6] = 'v';
							matrizMovimentoPosiveis[i-2] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno=varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final			*/				
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
							
						}
					}
					
					if ((i-9)>=0)
					{
						if ((matrizTabuleiro[i-4]='p') && (matrizTabuleiro[i-5]='p') && (matrizTabuleiro[i-1]='v'))
						{
						
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i] = 'p';
							matrizMovimentoPosiveis[i-1] = 'p';
							matrizMovimentoPosiveis[i-8] = 'v';
							matrizMovimentoPosiveis[i-9] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno=varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final		*/					
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
						}
					}
				
					if (((i-8)>=0) && ((i+1)<=19))
					{
						if ((matrizTabuleiro[i-3]='p') && (matrizTabuleiro[i-4]='p') && (matrizTabuleiro[i+1]='v'))
						{
							
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i] = 'p';
							matrizMovimentoPosiveis[i+1] = 'p';
							matrizMovimentoPosiveis[i-7] = 'v';
							matrizMovimentoPosiveis[i-8] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno=varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final				*/			
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
							
						}
					}
					
					if (((i-4)>=0) && ((i+2)<=19))
					{
						if ((matrizTabuleiro[i+1]='p') && (matrizTabuleiro[i-3]='p') && (matrizTabuleiro[i-4]='v'))
						{
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i] = 'p';
							matrizMovimentoPosiveis[i-4] = 'p';
							matrizMovimentoPosiveis[i+2] = 'v';
							matrizMovimentoPosiveis[i-2] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno=varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final		*/					
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
							
						}
					}
					
					if ((i+6)<=19)
					{
						if ((matrizTabuleiro[i+1]='p') && (matrizTabuleiro[i+5]='p') && (matrizTabuleiro[i+4]='v'))
						{
					
							/*Se as condicoes forem satisfeita copio a matriz do no para uma variavel*/
							strcpy(matrizMovimentoPosiveis, matrizTabuleiro);
							
							/*Movimento das pecaas*/
							matrizMovimentoPosiveis[i] = 'p';
							matrizMovimentoPosiveis[i+4] = 'p';
							matrizMovimentoPosiveis[i+2] = 'v';
							matrizMovimentoPosiveis[i] = 'v';
							
							/*Chamo a funcao para verificar se aquela configuracao ja existe na arvore*/	
							retorno=varrerArvore(arvoreroot,matrizMovimentoPosiveis);
							
							/*verifico se ea solucao final		*/					
							AchouSolucao = strcmp (matrizMovimentoPosiveis,matrizTabuleiroFinal);
							
							/* guardo a configuracao da variavel na arvore com N se ela ja exitir - neste caso nao preciso expandir ela*/
							if (retorno==0)
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'N',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'N',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'N',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'N',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'N',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'N',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'N',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'N',7);}
							}
							else
							{
								if (count==0) {addtree(arvore,matrizMovimentoPosiveis,'E',0);}
								if (count==1) {addtree(arvore,matrizMovimentoPosiveis,'E',1);}
								if (count==2) {addtree(arvore,matrizMovimentoPosiveis,'E',2);}
								if (count==3) {addtree(arvore,matrizMovimentoPosiveis,'E',3);}
								if (count==4) {addtree(arvore,matrizMovimentoPosiveis,'E',4);}
								if (count==5) {addtree(arvore,matrizMovimentoPosiveis,'E',5);}
								if (count==6) {addtree(arvore,matrizMovimentoPosiveis,'E',6);}
								if (count==7) {addtree(arvore,matrizMovimentoPosiveis,'E',7);}
							}
							
							/*verifico se a solucao e caso seja vou para a funcao que dara o caminho da solucao*/
							if (AchouSolucao==0)
							{
								if (count==0) {CaminhoSolucao(arvore->no1,pa);}
								if (count==1) {CaminhoSolucao(arvore->no2,pa);}
								if (count==2) {CaminhoSolucao(arvore->no3,pa);}
								if (count==3) {CaminhoSolucao(arvore->no4,pa);}
								if (count==4) {CaminhoSolucao(arvore->no5,pa);}
								if (count==5) {CaminhoSolucao(arvore->no6,pa);}
								if (count==6) {CaminhoSolucao(arvore->no7,pa);}
								if (count==7) {CaminhoSolucao(arvore->no8,pa);}
								return;
							}
							
							/*Somo mais um na variavel */
							count ++;
						
						}
					}
				}
				
			}
			if (AchouSolucao!=0)
			{
				analise(arvoreroot,arvore->no1,AchouSolucao,pa);
				analise(arvoreroot,arvore->no2,AchouSolucao,pa);
				analise(arvoreroot,arvore->no3,AchouSolucao,pa);
				analise(arvoreroot,arvore->no4,AchouSolucao,pa);
				analise(arvoreroot,arvore->no5,AchouSolucao,pa);
				analise(arvoreroot,arvore->no6,AchouSolucao,pa);
				analise(arvoreroot,arvore->no7,AchouSolucao,pa);
				analise(arvoreroot,arvore->no8,AchouSolucao,pa);
			}
			else
			return;
		}
	}
}
/* funcao recursiva para varrer a arvore*/
int varrerArvore(struct tnode *arvore,char matrizTabuleiro[])
{
	/* Variavel que indica se a matriz pesquisada ja se encontra na arvore, caso o resultado seja positivo a variavel sera igual a 0*/
	int Matrizexistente=1;
	if (arvore!=NULL)
	{
		Matrizexistente = strcmp(arvore->matriz,matrizTabuleiro);
		
		if (Matrizexistente !=0)
		{
			Matrizexistente = varrerArvore(arvore->no1,arvore->matriz);
		}
		if (Matrizexistente !=0)
		{
			Matrizexistente = varrerArvore(arvore->no2,arvore->matriz);
		}
		if (Matrizexistente !=0)
		{
			Matrizexistente = varrerArvore(arvore->no3,arvore->matriz);
		}
		if (Matrizexistente !=0)
		{
			Matrizexistente = varrerArvore(arvore->no4,arvore->matriz);
		}
		if (Matrizexistente !=0)
		{
			Matrizexistente = varrerArvore(arvore->no5,arvore->matriz);
		}
		if (Matrizexistente !=0)
		{
			Matrizexistente = varrerArvore(arvore->no6,arvore->matriz);
		}
		if (Matrizexistente !=0)
		{
			Matrizexistente = varrerArvore(arvore->no7,arvore->matriz);
		}
		if (Matrizexistente !=0)
		{
			Matrizexistente = varrerArvore(arvore->no8,arvore->matriz);
		}
	} 
	return Matrizexistente;
}
/*funcao para criar um no e adicionar as informacoes*/
void addtree (struct tnode *arvore,char matrizTabuleiro[], char blnExpandir, int no)
{
 if (arvore!=NULL)
 {
		arvore = (struct tnode *) malloc(sizeof(struct tnode)); /*Cria um novo no*/
		strcpy(arvore->matriz, matrizTabuleiro);
		arvore->expandir = blnExpandir;
		arvore->noPai = NULL;
		arvore->no1=arvore->no2=arvore->no3=arvore->no4=arvore->no5=arvore->no6=arvore->no7=arvore->no8=NULL;
 }
 else
 {
 struct tnode *novo;
 novo = (struct tnode *) malloc(sizeof(struct tnode)); /*Cria um novo no*/
	 strcpy(novo->matriz, matrizTabuleiro);
	 novo->expandir = blnExpandir;
	 novo->noPai = arvore;
	 novo->no1=novo->no2=novo->no3=novo->no4=novo->no5=novo->no6=novo->no7=novo->no8=NULL;
	 if (no==0) {arvore->no1=novo;}
	 if (no==1) {arvore->no2=novo;}
	 if (no==2) {arvore->no3=novo;}
	 if (no==3) {arvore->no4=novo;}
	 if (no==4) {arvore->no5=novo;}
	 if (no==5) {arvore->no6=novo;}
	 if (no==6) {arvore->no7=novo;}
	 if (no==7) {arvore->no8=novo;}
 }
}
void CaminhoSolucao(struct tnode *arvore,FILE *pa) 
{
	int i;
	if (arvore->noPai!=NULL)
	{
		/* escrevo a matriz no arquivo*/
		fputs(arvore->matriz, pa);
		/* volto ao inicio do arquivo*/
		rewind(pa);
		/*Seto o no pai e chamo a função recursivamente*/
		CaminhoSolucao(arvore->noPai, pa);
	}
}
void
ImprimirTabuleiro21(char matrizTabuleiro[])
{
	int i,j,ianterior;
	
	printf("\n");
	
	for (i=0;i<=5;i++)
	{
		/*printf(AZUL);*/
		printf("#");
	}
	printf("\n");
	
	for (i=0;i<=4;i++)
	{
		/*printf(AZUL);*/
		printf("#");
			
		for (j=ianterior;j<=ianterior+3;j++)
		{
			
			if (matrizTabuleiro[j] == 'q')
				printf("q");
				/*printf(CIANO);*/
						
			if (matrizTabuleiro[j] == 'v')
				printf("v");
				/*printf(CINZA);*/
		
			if (matrizTabuleiro[j] == 'p')
				printf("p");
				/*printf(VERMELHO);	*/
		}
		
		ianterior=j;
		
		/*printf(AZUL);*/
		printf("#");
		printf("\n");
			
	}
	for (i=0;i<=5;i++)
	{
		if (i==2 || i==3)
			printf("v");
			/*printf(CINZA);*/
		else
			printf("#");
			/*printf(AZUL);*/
	}
	printf("\n");
	
	sleep(1);
	
	/*Limpeza de tela...*/
	printf("\e[H\e[2J");
}
void imprimir (char matriz[])
{
	int i;
	for (i=0;i<=19;i++)
		printf("%c",matriz[i]);
	printf ("\n");
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais