fork(9) download
  1. <?php
  2.  
  3. // maze generation, random dfs
  4.  
  5.  
  6.  
  7. // generate maze
  8. function print2d($array) {
  9. foreach($array as $row) {
  10. foreach($row as $col) {
  11. echo $col . ' ';
  12. }
  13. echo "\n";
  14. }
  15.  
  16. echo "\n\n";
  17. }
  18.  
  19.  
  20. function isGoodPath($maze, $point) {
  21. if (!isset($maze[$point[0]][$point[1]]) )
  22. return false;
  23.  
  24. $dirs = [
  25. [0,-1],
  26. [1,0],
  27. [0,1],
  28. [-1,0],
  29. ];
  30.  
  31. $countPath = 0;
  32. foreach($dirs as $dir) {
  33. $newPoint = [$point[0] + $dir[0], $point[1] + $dir[1]];
  34. if (
  35. isset($maze[$newPoint[0]][$newPoint[1]]) &&
  36. $maze[$newPoint[0]][$newPoint[1]] == '.'
  37. ) {
  38. $countPath++;
  39. }
  40.  
  41. }
  42.  
  43. if ($countPath > 1)
  44. return false;
  45.  
  46. return true;
  47.  
  48. }
  49.  
  50. function generateMaze(&$maze, $point) {
  51. $dirs = [
  52. [0,-1],
  53. [1,0],
  54. [0,1],
  55. [-1,0],
  56. ];
  57.  
  58. shuffle($dirs);
  59.  
  60. foreach($dirs as $dir) {
  61. $newPoint = [$point[0] + $dir[0], $point[1] + $dir[1]];
  62.  
  63. if (isGoodPath($maze, $newPoint)) {
  64. $maze[$newPoint[0]][$newPoint[1]] = '.';
  65. generateMaze($maze, $newPoint);
  66. }
  67. }
  68.  
  69. return $maze;
  70. }
  71.  
  72.  
  73. $size = 25;
  74. $maze = array_fill(0, $size, array_fill(0, $size, '#'));
  75.  
  76. print2d(generateMaze($maze, [0, 0]));
Success #stdin #stdout 0.04s 52472KB
stdin
Standard input is empty
stdout
# . . # . . . # . . . . . # . . . . . . . # . # . 
. # . # # # . . . # # # . . # # . # # # . . . . . 
. # . . . . # . # . . . # . . . # . . . . # . # . 
. . # # # . # . . # . # # # # . . . # # . # . . # 
. # . . # . . # . # . . # . # # # # . . # . # . . 
. . # . # # . # . . # . . . . . . # . # . . . # . 
# . . . . # . . # . . # . # . # # . . . . # # . . 
. . # # . . # . . # . # . # . . . . # # . . # . # 
. # . . # . # . # . . # . . # # . # . . # . # . . 
. . . # . . # . . . # . . # . # . # . # . . . # . 
# # . # . # . # # # . # # . . . . # . # . # # . . 
. . . # . . . . . . . . # . # # # # . . . # # . # 
# # # . . # # # # . # . . . # . . . . # # . . . # 
. . . # # . . . . # # . # . # . # # # # # . # # . 
. # . . . . # # . # . . # . # . . . . # . . # . . 
. . # . # # . . . . # # # . . # # # # . . # # # . 
# . . # . . . # # . . . . # . # . . . . # . # # . 
. # . . # . # . # # . # . . . # . # # # . . . . . 
. . # . . # . . . . # . # # . # . # . . # # . # . 
# . . # . . . # # . # . . . . # . . # . . . . # . 
. . # . . # # . # . . # # . # . # . . # . # # . . 
# . . . # . . . . # . . . # . . # # . # . # . # # 
# # . # . . # . # . # # . # # . . . . # . . . . . 
# . . . # # # . . . # # . . # # . # # . # # # # . 
. . # . . . . . # . . . # . . . . . . . . . . . .