Advertisement
juanjo12x

Rat_In_Maze_All_Solutions

May 4th, 2014
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.21 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. //Tamaño del laberinto
  4. #define N 4
  5. int verif=0;//booleano que me permite saber si hay solucion o no
  6.  
  7. int solveMazeUtil(int maze[N][N], int x, int y, int sol[N][N]);
  8.  
  9. /* funcion que imprimirá mi solución */
  10. void printSolution(int sol[N][N])
  11. {
  12.     int i,j;
  13.     for ( i = 0; i < N; i++)
  14.     {
  15.         for ( j = 0; j < N; j++)
  16.             printf(" %d ", sol[i][j]);
  17.         printf("\n");
  18.     }
  19. }
  20.  
  21. /* verifica si es  segura la casilla */
  22. int isSafe(int maze[N][N], int x, int y)
  23. {
  24.    
  25.     if(x >= 0 && x < N && y >= 0 && y < N && maze[x][y] == 1)
  26.         return 1;
  27.  
  28.     return 0;
  29. }
  30.  
  31. /*Esta funcion en si no ayuda mucho, solo permite saber si hubo solucion o no*/
  32. int solveMaze(int maze[N][N])
  33. {
  34.     int sol[N][N] = { {0, 0, 0, 0},
  35.         {0, 0, 0, 0},
  36.         {0, 0, 0, 0},
  37.         {0, 0, 0, 0}
  38.     };
  39.  
  40.     if(solveMazeUtil(maze, 0, 0, sol) == 1)
  41.     {
  42.         printf("----");
  43.         return 0;
  44.     }
  45.     if (verif==0){
  46.         printf("No existe solucion");
  47.     }
  48.  
  49.  
  50.     return 1;
  51. }
  52.  
  53. /*Funcion Backtrack*/
  54. int solveMazeUtil(int maze[N][N], int x, int y, int sol[N][N])
  55. {
  56.     // Caso Base
  57.     if(x == N-1 && y == N-1)
  58.     {
  59.         sol[x][y] = 1;
  60.         printSolution(sol);//imprimo solucion
  61.         printf("\n");
  62.         verif=1;//se encontro solucion
  63.         return 1;
  64.        
  65.        
  66.     }
  67.  
  68.     // verifico si es valido
  69.     if(isSafe(maze, x, y) == 1)
  70.     {
  71.         // si es valido, marco esta casilla como parte de mi camino
  72.         sol[x][y] = 1;int p;
  73.  
  74.         /* Me muevo hacia la direccion x permitida*/
  75.         if (solveMazeUtil(maze, x+1, y, sol) == 1)
  76.             p=1;//Si aqui pusiera return 1 , solo botaria una solucion
  77.  
  78.         /* Me muevo hacia la direccion y permitida */
  79.         if (solveMazeUtil(maze, x, y+1, sol) == 1)
  80.             p=1;
  81.  
  82.         /* Si no llego a alguna solucion, mi camino que tome no es valido,
  83.          * vuelvo y pruebo otro camino*/
  84.         sol[x][y] = 0;
  85.         return 0;
  86.     }  
  87.  
  88.     return 1;
  89. }
  90.  
  91.  
  92. int main()
  93. {
  94.     int maze[N][N]  =  { {1, 0, 0, 0},
  95.         {1, 1, 1, 1},
  96.         {0, 1, 1, 0},
  97.         {1, 1, 1, 1}
  98.     };
  99.  
  100.     solveMaze(maze);
  101.     getchar();
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement