Advertisement
joaoantoniodornelas

Passeio do cavalo

Apr 30th, 2014
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6. int possibilidades = 1;
  7.  
  8. int a[8];
  9. int b[8];
  10. int t[6][6];
  11.  
  12.  
  13. void imprime(int n, int p){
  14.  int i,j;
  15.  for(i=0;i<n;i++){
  16.    for(j=0;j<n;j++){
  17.      printf("%3d",t[i][j]);
  18.      }
  19.     printf("\n");
  20.    }
  21.    printf("\n%d movimentos antes do retorno", p);
  22. }
  23.  
  24.  
  25. int cavalo(int i, int x, int y, int n, int p){
  26.     int u,v,k,q;
  27.     int c = 0;
  28.    
  29.     if(i==n*n+1){
  30.         imprime(n,p);
  31.         return 1;
  32.         }
  33.        
  34.     for(k=0;k<8;k++){
  35.    
  36.       u = x + a[k];
  37.       v = y + b[k];
  38.      
  39.       if( (u>=0 && u<=n-1) && (v>=0 && v<=n-1)){
  40.           if(t[u][v]==0 && possibilidades == 1){
  41.                 c++;
  42.             }
  43.         }
  44.     }
  45.    
  46.     p *= c; //Calcula possibilidades
  47.      
  48.      
  49.     if(i==n*n+1){
  50.         imprime(n,p);
  51.         return 1;
  52.     }
  53.    
  54.     for(k=0;k<8;k++){
  55.    
  56.         u = x + a[k];  v = y + b[k];
  57.         if( (u>=0 && u<=n-1) && (v>=0 && v<=n-1)){
  58.             if(t[u][v]==0){
  59.                 t[u][v]=i;
  60.                 q = cavalo(i+1,u,v,n,p);
  61.                 if(q==0){
  62.                     t[u][v]=0; int possibilidades = 0;
  63.                 }
  64.             else return 1;
  65.             }
  66.         }
  67.     }
  68.    
  69.     return 0;
  70.  
  71.     }
  72.    
  73.    
  74. int main(){
  75.    
  76.     int n;
  77.     int cont = 1;
  78.     int c, d, e, f, i;
  79.     memset(t,0,sizeof(t));
  80.    
  81.     a[0]=2;a[1]=1;a[2]=-1;a[3]=-2,a[4]=-2;a[5]=-1;a[6]=1;a[7]=2;
  82.     b[0]=1;b[1]=2;b[2]=2;b[3]=1,b[4]=-1;b[5]=-2;b[6]=-2;b[7]=-1;
  83.  
  84.     printf("Insira a dimensao do tabuleiro: ");
  85.     scanf("%d", &n);
  86.    
  87.     if(n < 4 || n > 6){
  88.    
  89.         printf("Voce digitou um valor invalido. Tente novamente.");
  90.         scanf("%d", &n);
  91.        
  92.     }
  93.        
  94.     printf("Caso nao sejam imprimidas matrizes, sua resolução nao existe");
  95.  
  96.     for(i = 1; i < n*n + 1; i++){
  97.          for(c = 0; c < n; c++){
  98.                for(d = 0; d < n; d++){
  99.                      t[c][d]=0;
  100.  
  101.                 }
  102.             }
  103.                      printf("\nResolucao para posicao inicial na casa %d\n", i);
  104.                      if(i%n == 0){
  105.                         e = i/n - 1;
  106.                         f = n-1;
  107.                     }
  108.                     else {
  109.                         e = i/n; f = i%n - 1;
  110.                     }
  111.                    
  112.                     t[e][f]=1;
  113.                     possibilidades = 1;
  114.                     cavalo(2,e,f,n,1);
  115.         }
  116.         system("PAUSE");
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement