fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define SIZE 12
  6.  
  7. void printMaze(char maze[][SIZE])
  8. {
  9. for (int row = 0; row < SIZE; ++row)
  10. {
  11. for (int column = 0; column < SIZE; ++column)
  12. {
  13. printf("%c ", maze[row][column]);
  14. }
  15.  
  16. puts("");
  17. }
  18.  
  19. puts("");
  20. }
  21.  
  22. void mazeGenerator(char maze[][SIZE])
  23. {
  24. for (int row = 0; row < SIZE; ++row)
  25. {
  26. for (int column = 0; column < SIZE; ++column)
  27. {
  28. if (row == 0 || row == SIZE - 1 ||
  29. column == 0 || column == SIZE - 1)
  30. {
  31. maze[row][column] = '#';
  32. }
  33. else
  34. {
  35. maze[row][column] = '.';
  36. }
  37. }
  38. }
  39.  
  40. for (int row = 1; row < SIZE - 1; ++row)
  41. {
  42. for (int column = 1; column < SIZE - 1; ++column)
  43. {
  44. if (rand() % 4 == 0)
  45. {
  46. maze[row][column] = '#';
  47. }
  48. }
  49. }
  50.  
  51. maze[1][1] = '.';
  52. maze[SIZE - 2][SIZE - 2] = '.';
  53.  
  54. maze[SIZE - 2][SIZE - 1] = '.';
  55. }
  56.  
  57. int mazeTraverse(char maze[][SIZE],
  58. int row,
  59. int column)
  60. {
  61. if (row < 0 || row >= SIZE ||
  62. column < 0 || column >= SIZE)
  63. {
  64. return 1;
  65. }
  66.  
  67. if (maze[row][column] != '.')
  68. {
  69. return 0;
  70. }
  71.  
  72. maze[row][column] = 'X';
  73.  
  74. if (mazeTraverse(maze, row, column + 1))
  75. {
  76. return 1;
  77. }
  78.  
  79. if (mazeTraverse(maze, row + 1, column))
  80. {
  81. return 1;
  82. }
  83.  
  84. if (mazeTraverse(maze, row, column - 1))
  85. {
  86. return 1;
  87. }
  88.  
  89. if (mazeTraverse(maze, row - 1, column))
  90. {
  91. return 1;
  92. }
  93.  
  94. maze[row][column] = '.';
  95.  
  96. return 0;
  97. }
  98.  
  99. int main(void)
  100. {
  101. char maze[SIZE][SIZE];
  102.  
  103. srand((unsigned int)time(NULL));
  104.  
  105. mazeGenerator(maze);
  106.  
  107. printf("Generated maze:\n\n");
  108. printMaze(maze);
  109.  
  110. if (mazeTraverse(maze, 1, 1))
  111. {
  112. printf("The maze was solved.\n");
  113. }
  114. else
  115. {
  116. printf("No path was found.\n");
  117. }
  118.  
  119. printf("\nMaze after traversal:\n\n");
  120. printMaze(maze);
  121.  
  122. return 0;
  123. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
Generated maze:

# # # # # # # # # # # # 
# . . # . # . . . # . # 
# # . . . # . . # # . # 
# . . . # # . . . . # # 
# # . . . # . . . # . # 
# # # # . . # . # # . # 
# . . # . . . # . . . # 
# . . . # # . . . . . # 
# # . . # . . . . . . # 
# . . . . . . . . # . # 
# . . . . # . . . # . . 
# # # # # # # # # # # # 

The maze was solved.

Maze after traversal:

# # # # # # # # # # # # 
# X X # . # . . . # . # 
# # X X . # . . # # . # 
# . . X # # . . . . # # 
# # . X X # . . . # . # 
# # # # X X # . # # . # 
# . . # . X X # . . . # 
# . . . # # X X X X X # 
# # . . # . . . . . X # 
# . . . . . . . . # X # 
# . . . . # . . . # X X 
# # # # # # # # # # # #