Buscar

passeio cavalo do cavalo

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

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
////////////////////////////////////////////////
// CEFET/RJ UnED Petrópolis //
// Bernardo Costa //
// Estrutura de Dados II //
// Dijkstra 								 //					
// Professora Laura Assis		 //
////////////////////////////////////////////////
int n;
int **t,a[8],b[8];
void imprime();
int **Matriz(int v);
int cavalo(int i, int x, int y);
int main(){
	time_t start, stop;
 	double tempo = 0.0;
 	start = clock();
 	int iniciox, inicioy, N;
 	printf("\n\tPasseio do Cavalo\n\nEscolha o tamanho do tabuleiro\nbasta digitar um número\n");
 	scanf("%d", &N);
 	if(N<=4){
		printf("\nNão é possível encontrar solução para n <= 4\n");
		exit(0);		
 	}
 	printf("Escolha a posição inicial do cavalo (linha, coluna)\n");
 	scanf("%d%d", &iniciox, &inicioy);
 	printf("\n-----------------------\n\n");
 
 	n = N;
 	int cont;
 	t = Matriz(n);
 	//posições alcancaveis pelo cavalo par (a[k],b[k])
 	a[0]=2;a[1]=1;a[2]=-1;a[3]=-2; 
 	a[4]=-2;a[5]=-1;a[6]=1;a[7]=2;
 	b[0]=1;b[1]=2;b[2]=2;b[3]=1;
 	b[4]=-1;b[5]=-2;b[6]=-2;b[7]=-1;
 	cont = 1;
 	t[iniciox][inicioy]=1;
 	cavalo(2,iniciox,inicioy);
 	stop = clock();
 	tempo = (double) (stop-start)/CLOCKS_PER_SEC;
 	printf("\nTempo de Execução: %lf s\n", tempo);
}
void imprime(){
	int i,j;
	for(i=0;i<n;i++){ 
 		for(j=0;j<n;j++){ 
			printf(" %2d ",t[i][j]);
		} 
 	printf("\n"); 	
 	}
}
int **Matriz(int v){
	int **t; 
	int i; 
 	t = (int **) calloc(v, sizeof(int*));
 	for(i = 0; i<v;i++){
 	t[i] = calloc(v, sizeof(int));
 	}
	return t;
}
int cavalo(int i, int x, int y){
	int u,v,k,q; 
	if(i==((n*n)+1)){
 		imprime();
 		return 1;
 	}
	for(k=0;k<8;k++){
 	u = x + a[k]; v = y + b[k];
 	if( (u>=0 && u<=(n-1)) && (v>=0 && v<=(n-1))){
 		if(t[u][v]==0){ 
 		t[u][v]=i; 
 		q = cavalo(i+1,u,v);
 	if(q==0){
 		t[u][v]=0; 
 	} 
 	else{
 		return 1; 
 	}
 		}
 	}
 	}
	return 0;
}

Teste o Premium para desbloquear

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

Outros materiais