fork download
  1. <?php
  2.  
  3.  
  4. define('SUBWAY', 'sub');
  5. define('FOOT', 'foot');
  6. define('BUS', 'bus');
  7.  
  8. $transportName = array(
  9. SUBWAY => 'едешь на метро',
  10. FOOT => 'идешь пешком',
  11. BUS => 'едешь на автобусе'
  12. );
  13.  
  14. $startPoint = 'pet'; // Петроградская
  15. $endPoint = 'nov'; // Новая Голландия
  16.  
  17. $pointNames = array(
  18. 'pet' => 'ст. м. Петроградская',
  19. 'chk' => 'ст. м. Чкаловская',
  20. 'gor' => 'ст. м. Горьковская',
  21. 'spo' => 'ст. м. Спортивная',
  22. 'vas' => 'ст. м. Василеостровская',
  23. 'kre' => 'Петропавловская крепость',
  24. 'let' => 'Летний сад',
  25. 'dvo' => 'Дворцовая площадь',
  26. 'isa' => 'Исакиевский собор',
  27. 'nov' => 'Новая Голландия',
  28. 'ras' => 'Дом Раскольникова',
  29. 'gos' => 'Гостиный Двор',
  30. 'sen' => 'Сенная Площадь',
  31. 'vla' => 'ст. м. Владимирская',
  32. 'vit' => 'Витебский вокзал',
  33. 'teh' => 'Технологический Институт'
  34. );
  35.  
  36. $paths = array(
  37. 'pet' => array(
  38. 'chk' => canGet(10, BUS),
  39. 'gor' => canGet(3, SUBWAY)
  40. ),
  41.  
  42. 'chk' => array(
  43. 'pet' => canGet(10, BUS),
  44. 'spo' => canGet(3, SUBWAY)
  45. ),
  46.  
  47. 'gor' => array(
  48. 'pet' => canGet(3, BUS),
  49. 'kre' => canGet(5, FOOT),
  50. 'gos' => canGet(6, SUBWAY)
  51. ),
  52.  
  53. 'spo' => array(
  54. 'chk' => canGet(3, SUBWAY),
  55. 'vas' => canGet(10, BUS),
  56. 'sen' => canGet(7, SUBWAY)
  57. ),
  58.  
  59. 'vas' => array(
  60. 'spo' => canGet(10, BUS),
  61. 'gos' => canGet(7, SUBWAY),
  62. 'nov' => canGet(11, FOOT)
  63. ),
  64.  
  65. 'kre' => array(
  66. 'gor' => canGet(5, FOOT)
  67. ),
  68.  
  69. 'let' => array(
  70. 'dvo' => canGet(6, FOOT),
  71. 'gos' => canGet(7, FOOT)
  72. ),
  73.  
  74. 'dvo' => array(
  75. 'isa' => canGet(6, FOOT),
  76. 'gos' => canGet(6, FOOT),
  77. 'let' => canGet(6, FOOT)
  78. ),
  79.  
  80. 'isa' => array(
  81. 'dvo' => canGet(6, FOOT),
  82. 'nov' => canGet(5, FOOT)
  83. ),
  84.  
  85. 'nov' => array(
  86. 'vas' => canGet(11, FOOT),
  87. 'isa' => canGet(5, FOOT),
  88. 'ras' => canGet(7, BUS)
  89. ),
  90.  
  91. 'ras' => array(
  92. 'nov' => canGet(7, BUS),
  93. 'sen' => canGet(3, FOOT)
  94. ),
  95.  
  96. 'gos' => array(
  97. 'vas' => canGet(7, SUBWAY),
  98. 'sen' => canGet(3, SUBWAY),
  99. 'dvo' => canGet(6, FOOT),
  100. 'gor' => canGet(6, SUBWAY),
  101. 'let' => canGet(7, FOOT),
  102. 'vla' => canGet(7, FOOT)
  103. ),
  104.  
  105. 'sen' => array(
  106. 'ras' => canGet(3, FOOT),
  107. 'spo' => canGet(7, SUBWAY),
  108. 'gos' => canGet(3, SUBWAY),
  109. 'vla' => canGet(4, SUBWAY),
  110. 'vit' => canGet(2, SUBWAY),
  111. 'teh' => canGet(3, SUBWAY)
  112. ),
  113.  
  114. 'vla' => array(
  115. 'sen' => canGet(4, SUBWAY),
  116. 'gos' => canGet(7, FOOT),
  117. 'vit' => canGet(3, SUBWAY)
  118. ),
  119.  
  120. 'vit' => array(
  121. 'sen' => canGet(2, SUBWAY),
  122. 'teh' => canGet(2, SUBWAY),
  123. 'vla' => canGet(3, SUBWAY)
  124. ),
  125.  
  126. 'teh' => array(
  127. 'sen' => canGet(3, SUBWAY),
  128. 'vit' => canGet(2, SUBWAY)
  129. )
  130. );
  131.  
  132. /* Чтобы не писать много раз array('time' => ..., 'by' => ...), используем функцию.
  133.   «canGet» переводится как «можно попасть» */
  134. function canGet($time, $byWhat) {
  135. return array('time' => $time, 'by' => $byWhat);
  136. }
  137.  
  138. function makeOneStep($pathDone, $time, $point, $target, $paths) {
  139. if (isset($paths[$point][$target])) {
  140. $result = array();
  141. $result['time'] = $time + $paths[$point][$target]['time'];
  142. $result['path'] = array_merge($pathDone, $pointNames[$target]);
  143. return $result;
  144. } else {
  145. foreach($paths[$point] as $key => $value) {
  146. if(isset($paths[$key][$target])) {
  147. $newStep = makeOneStep($pathDone, $time, $point, $paths[$key], $path);
  148. return makeOneStep($newStep['path'], $newStep['time'], end($newStep['path']), $target, $path);
  149. }
  150. }
  151. }
  152. }
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
Standard output is empty