Baixe o app para aproveitar ainda mais
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; }
Compartilhar