Advertisement
Guest User

Solve_The_Maze_In_The_Shortest_Way

a guest
Jun 20th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.81 KB | None | 0 0
  1. // (Based on: https://symbolsprogrammingblog.wordpress.com/2010/06/20/%D7%9E%D7%A6%D7%99%D7%90%D7%AA-%D7%94%D7%93%D7%A8%D7%9A-%D7%94%D7%A7%D7%A6%D7%A8%D7%94-%D7%91%D7%99%D7%95%D7%AA%D7%A8-%D7%91%D7%9E%D7%91%D7%95%D7%9A/ )
  2.  
  3. // This code is waiting for you!
  4. // Fill the function "SolveMaze()" with your code so it will correctly solve the maze in the shortest way!
  5.  
  6.  
  7.  
  8.  
  9. #include <stdio.h>
  10.  
  11. #define HEIGHT   50
  12. #define WIDTH    9
  13.  
  14. #define WALL     -1
  15. #define PATH     0
  16. #define START    83  // 'S'
  17. #define END      69  // 'E'
  18. #define ARROW    176 //  ░
  19.  
  20.  
  21. // This function try to solve the maze with minimum steps.
  22. //
  23. // If succeeded - fill the given board with 'ARROW' in the path that is found,
  24. //                and return the number of steps.
  25. // If failed    - return -1
  26. int SolveMaze(int Maze[HEIGHT][WIDTH])
  27. {
  28.     // ***********
  29.     // Your Code!
  30.     // ***********
  31.  
  32.  
  33.     // For example:
  34.     Maze[1][2] = ARROW; // 1
  35.     Maze[1][3] = ARROW; // 2
  36.     Maze[1][4] = ARROW; // 3
  37.     Maze[1][5] = ARROW; // 4
  38.     Maze[2][5] = ARROW; // 5
  39.     Maze[3][5] = ARROW; // 6
  40.     // ...
  41.     return 6;
  42. }
  43.  
  44.  
  45. void ShowBoard(int Board[HEIGHT][WIDTH])
  46. {
  47.     int row;
  48.     int col;
  49.  
  50.     printf("Full maze:\n\n\n");
  51.  
  52.     for (row = 0; row < HEIGHT; row++)    // Loop through every row
  53.     {
  54.         for (col = 0; col < WIDTH; col++) // And every column
  55.         {
  56.             switch(Board[row][col])
  57.             {
  58.                 case WALL  :
  59.                   putchar('\xDB');
  60.                   break;
  61.  
  62.                 case PATH  :
  63.                   putchar(' ');
  64.                   break;
  65.  
  66.                 case ARROW :
  67.                   putchar(ARROW);
  68.                   break;
  69.  
  70.                 case START :
  71.                   putchar(START);
  72.                   break;
  73.  
  74.                 case END   :
  75.                   putchar(END);
  76.                   break;
  77.  
  78.                default     :
  79.                   putchar('?');
  80.                   break;
  81.             }
  82.         }
  83.         putchar('\n');
  84.     }
  85.     printf("\n\n\n");
  86. }
  87.  
  88. void CopyBoard(int targetBoard[HEIGHT][WIDTH], int sourceBoard[HEIGHT][WIDTH])
  89. {
  90.     int i, j;
  91.     for (i = 0; i < HEIGHT; i++)
  92.     {
  93.         for (j = 0; j < WIDTH; j++)
  94.         {
  95.             targetBoard[i][j] = sourceBoard[i][j];
  96.         }
  97.     }
  98. }
  99.  
  100. void InitializeTheMaze(int Board[HEIGHT][WIDTH])
  101. {
  102.     int TmpBoard[HEIGHT][WIDTH] = {
  103.         { WALL , WALL , START, WALL, WALL , WALL , WALL , WALL , WALL  },
  104.         { WALL , PATH , PATH , PATH, PATH , PATH , PATH , PATH , WALL  },
  105.         { WALL , PATH , WALL , WALL, WALL , PATH , WALL , WALL , WALL  },
  106.         { WALL , PATH , WALL , PATH, WALL , PATH , PATH , PATH , WALL  },
  107.         { WALL , WALL , WALL , PATH, WALL , PATH , WALL , PATH , WALL  },
  108.         { WALL , PATH , WALL , PATH, PATH , PATH , PATH , PATH , WALL  },
  109.         { WALL , PATH , WALL , WALL, WALL , WALL , WALL , PATH , WALL  },
  110.         { WALL , PATH , PATH , PATH, PATH , PATH , PATH , PATH , WALL  },
  111.         { WALL , PATH , WALL , WALL, WALL , WALL , WALL , WALL , WALL  },
  112.         { WALL , PATH , PATH , PATH, PATH , PATH , PATH , PATH , WALL  },
  113.         { WALL , WALL , WALL , WALL, WALL , WALL , WALL , PATH , WALL  },
  114.         { WALL , PATH , PATH , PATH, PATH , PATH , PATH , PATH , WALL  },
  115.         { WALL , PATH , WALL , WALL, PATH , WALL , WALL , PATH , WALL  },
  116.         { WALL , PATH , PATH , PATH, PATH , PATH , PATH , PATH , WALL  },
  117.         { WALL , PATH , WALL , PATH, WALL , PATH , WALL , PATH , WALL  },
  118.         { WALL , PATH , WALL , PATH, PATH , PATH , WALL , PATH , WALL  },
  119.         { WALL , PATH , WALL , WALL, WALL , WALL , WALL , PATH , WALL  },
  120.         { WALL , PATH , PATH , PATH, PATH , PATH , PATH , PATH , WALL  },
  121.         { WALL , WALL , WALL , WALL, WALL , WALL , WALL , PATH , WALL  },
  122.         { WALL , PATH , PATH , PATH, PATH , PATH , WALL , PATH , WALL  },
  123.         { WALL , WALL , PATH , WALL, WALL , WALL , WALL , PATH , WALL  },
  124.         { WALL , PATH , PATH , PATH, WALL , PATH , PATH , PATH , WALL  },
  125.         { WALL , PATH , WALL , WALL, WALL , PATH , WALL , WALL , WALL  },
  126.         { WALL , PATH , PATH , PATH, WALL , PATH , PATH , PATH , WALL  },
  127.         { WALL , PATH , WALL , PATH, WALL , PATH , WALL , PATH , WALL  },
  128.         { WALL , PATH , WALL , PATH, PATH , PATH , PATH , PATH , WALL  },
  129.         { WALL , WALL , WALL , WALL, WALL , PATH , WALL , PATH , WALL  },
  130.         { WALL , PATH , PATH , PATH, PATH , PATH , PATH , PATH , WALL  },
  131.         { WALL , PATH , WALL , PATH, PATH , WALL , PATH , WALL , WALL  },
  132.         { WALL , PATH , PATH , PATH, WALL , WALL , PATH , WALL , WALL  },
  133.         { WALL , WALL , WALL , PATH, WALL , WALL , PATH , WALL , WALL  },
  134.         { WALL , PATH , PATH , PATH, PATH , WALL , PATH , PATH , WALL  },
  135.         { WALL , WALL , WALL , PATH, WALL , WALL , PATH , PATH , WALL  },
  136.         { WALL , PATH , PATH , PATH, WALL , WALL , WALL , PATH , WALL  },
  137.         { WALL , PATH , WALL , PATH, WALL , PATH , WALL , PATH , WALL  },
  138.         { WALL , PATH , WALL , PATH, PATH , PATH , PATH , PATH , WALL  },
  139.         { WALL , PATH , PATH , PATH, PATH , WALL , PATH , PATH , WALL  },
  140.         { WALL , PATH , WALL , PATH, PATH , PATH , PATH , PATH , WALL  },
  141.         { WALL , WALL , WALL , WALL, PATH , WALL , PATH , WALL , WALL  },
  142.         { WALL , PATH , PATH , PATH, PATH , WALL , PATH , PATH , WALL  },
  143.         { WALL , PATH , WALL , WALL, WALL , WALL , PATH , WALL , WALL  },
  144.         { WALL , PATH , PATH , PATH, WALL , PATH , PATH , PATH , WALL  },
  145.         { WALL , PATH , WALL , WALL, WALL , WALL , PATH , WALL , WALL  },
  146.         { WALL , PATH , PATH , PATH, WALL , PATH , PATH , PATH , WALL  },
  147.         { WALL , PATH , WALL , PATH, WALL , PATH , WALL , PATH , WALL  },
  148.         { WALL , PATH , WALL , PATH, PATH , PATH , PATH , PATH , WALL  },
  149.         { WALL , WALL , WALL , WALL, WALL , WALL , WALL , PATH , WALL  },
  150.         { WALL , PATH , PATH , PATH, PATH , PATH , PATH , PATH , WALL  },
  151.         { WALL , PATH , PATH , WALL, WALL , WALL , PATH , PATH , WALL  },
  152.         { WALL , END  , WALL , WALL, WALL , WALL , WALL , WALL , WALL  }
  153.     };
  154.  
  155.     CopyBoard(Board, TmpBoard);
  156. }
  157.  
  158. int main()
  159. {
  160.     int Board[HEIGHT][WIDTH];
  161.     int Steps;
  162.  
  163.     InitializeTheMaze(Board);
  164.  
  165.     printf("* Start:\n\n");
  166.     ShowBoard(Board);
  167.  
  168.     printf("* Program Answer:\n\n");
  169.     Steps = SolveMaze(Board);
  170.     if (Steps != -1) // Path found
  171.     {
  172.         printf("Number of steps: %d\n-----------------------\n", Steps);
  173.         ShowBoard(Board);
  174.     }
  175.     else
  176.     {
  177.         printf("Maze cannot be solved! :(\n\n");
  178.     }
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement