Advertisement
joaoantoniodornelas

Passeio do cavalo - Mito edition

Apr 30th, 2014
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.01 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6. int posb = 1
  7.  
  8.  
  9. int t[6][6],a[8] = {2, 1, -1, -2, -2, -1, 1 ,2}, b[8] = {1, 2, 2, 1, -1, -2,-2 -1};
  10. void imprime(int n, int p){
  11.  int i,j;
  12.  for(i=0;i<n;i++){
  13.    for(j=0;j<n;j++){
  14.      printf("%3d",t[i][j]);}
  15.     printf("\n");
  16.    }
  17.    printf("\n%d movimentos ate retornar", p);
  18. }
  19.  
  20.  
  21. int cavalo(int i, int x, int y, int n, int p){  // c e p sao contadores de possibilidades
  22.  int u,v,k,q, c = 0;
  23.  if(i==n*n+1){ imprime(n,p); return 1;}
  24.  for(k=0;k<8;k++){
  25.   u = x + a[k];  v = y + b[k];
  26.   if( (u>=0 && u<=n-1) && (v>=0 && v<=n-1)){
  27.    if(t[u][v]==0 && posb == 1){
  28.         c++;}}} p *= c; //Calcula possibilidades
  29.  if(i==n*n+1){ imprime(n,p); return 1;}
  30.  //executa movimentos
  31.  for(k=0;k<8;k++){
  32.   u = x + a[k];  v = y + b[k];
  33.   //testa limites do tabuleiro
  34.   if( (u>=0 && u<=n-1) && (v>=0 && v<=n-1)){
  35.    if(t[u][v]==0){ //posicao livre
  36.     t[u][v]=i; //registre o movimento
  37.     q = cavalo(i+1,u,v,n,p);
  38.     if(q==0) {t[u][v]=0; int posb = 0;}//se não alcançou todos, desfaça. Ai que o contador de possibilidades eh interrompido.
  39.     else return 1; // se alcançou todos, retorne 1
  40.    }
  41.   }
  42.  }
  43.  return 0;
  44. }
  45.  
  46.  
  47.  
  48. int main(){
  49.     int n;
  50.         printf("Insira a dimensao do tabuleiro: "); scanf("%d", &n);
  51.         if(n < 4 || n > 6){
  52.            
  53.             printf("Valor invalido. Deve ser um numero de 4 a 6. Digite novamente:");
  54.             scanf("%d", &n);
  55.         }
  56.  
  57.         printf("Nao existem solucoes para os pares ");
  58.  
  59.    
  60.     int cont;
  61.     int c, d, e, f, i;
  62.    
  63.    
  64.    
  65.     memset(t,0,sizeof(t));
  66.     cont =1;
  67.    
  68.     for(i = 1; i < n*n-1; i++){
  69.      for(c = 0; c < n; c++){
  70.        for(d = 0; d < n; d++){
  71.              t[c][d]=0;  //resetar matriz
  72.              }
  73.         }
  74.  
  75.         printf("\nComecando da casa %d\n", i);
  76.         if(i%n == 0){
  77.              e = i/n - 1; f = n-1;
  78.         }
  79.         else {
  80.             e = i/n; f = i%n - 1;
  81.         }  //associa a casa a posicao da matriz
  82.              
  83.         t[e][f]=1;
  84.         posb = 1;//reseta contador de possibilidades
  85.         cavalo(2,e,f,n,1);
  86.        
  87.        
  88.     }
  89.  system("PAUSE");
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement