eduardovp97

Knights Tour

Sep 20th, 2016
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #define N 8
  3.  
  4. int mov[8][2];
  5.  
  6. void printArray(int tablero[N][N]);
  7. int knightsTour(int tablero[N][N], int x, int y, int posiciones);
  8. int isValid(int tablero[N][N], int x, int y, int i);
  9.  
  10. int main(){
  11.  
  12.     mov[0][0] = -1;
  13.     mov[0][1] = 2;
  14.     mov[1][0] = -2;
  15.     mov[1][1] = 1;
  16.     mov[2][0] = -2;
  17.     mov[2][1] = -1;
  18.     mov[3][0] = -1;
  19.     mov[3][1] = -2;
  20.     mov[4][0] = 1;
  21.     mov[4][1] = -2;
  22.     mov[5][0] = 2;
  23.     mov[5][1] = -1;
  24.     mov[6][0] = 2;
  25.     mov[6][1] = 1;
  26.     mov[7][0] = 1;
  27.     mov[7][1] = 2;
  28.  
  29.     int tablero[N][N];
  30.     int i,j;
  31.     for(i=0; i<N; i++)
  32.         for(j=0; j<N; j++)
  33.             tablero[i][j] = 0;
  34.     int x=0, y=0;
  35.     tablero[x][y] = 1;
  36.     if(knightsTour(tablero,x,y,1)){
  37.         printArray(tablero);
  38.     }else{
  39.         printf("No existe solucion.\n");
  40.     }
  41.  
  42.     return 0;
  43. }
  44.  
  45. void printArray(int tablero[N][N]){
  46.     int i,j;
  47.     for(i=0; i<N; i++){
  48.         for(j=0; j<N; j++)
  49.             if(tablero[i][j] >9)
  50.                 printf("%d ",tablero[i][j]);
  51.             else
  52.                 printf("%d  ",tablero[i][j]);
  53.         printf("\n");
  54.     }
  55.     printf("\n");
  56. }
  57.  
  58. int knightsTour(int tablero[N][N], int x, int y, int posiciones){
  59.     if(posiciones == N*N)
  60.         return 1;
  61.     int i;
  62.     for(i=0; i<8; i++){
  63.         if(isValid(tablero,x,y,i)){
  64.             x += mov[i][0];
  65.             y += mov[i][1];
  66.             tablero[x][y] = posiciones+1;
  67.             printArray(tablero);
  68.             if(knightsTour(tablero,x,y,posiciones+1)){
  69.                 return 1;
  70.             }else{
  71.                 tablero[x][y] = 0;
  72.                 x -= mov[i][0];
  73.                 y -= mov[i][1];
  74.  
  75.             }
  76.         }
  77.     }
  78.     return 0;
  79. }
  80.  
  81. int isValid(int tablero[N][N], int x, int y, int i){
  82.     int newx = x + mov[i][0];
  83.     int newy = y + mov[i][1];
  84.     if(newx<8 && newx>=0 && newy<8 && newy>=0 && tablero[newx][newy] == 0)
  85.         return 1;
  86.     return 0;
  87. }
Add Comment
Please, Sign In to add comment