<?php
SUBWAY => 'едешь на метро' ,
FOOT => 'идешь пешком' ,
BUS => 'едешь на автобусе'
) ;
$startPoint = 'pet' ; // Петроградская
$endPoint = 'nov' ; // Новая Голландия
$pathDone = [ ] ;
$time = 0 ;
$tempTime = 0 ;
'pet' => 'ст. м. Петроградская' ,
'chk' => 'ст. м. Чкаловская' ,
'gor' => 'ст. м. Горьковская' ,
'spo' => 'ст. м. Спортивная' ,
'vas' => 'ст. м. Василеостровская' ,
'kre' => 'Петропавловская крепость' ,
'let' => 'Летний сад' ,
'dvo' => 'Дворцовая площадь' ,
'isa' => 'Исакиевский собор' ,
'nov' => 'Новая Голландия' ,
'ras' => 'Дом Раскольникова' ,
'gos' => 'Гостиный Двор' ,
'sen' => 'Сенная Площадь' ,
'vla' => 'ст. м. Владимирская' ,
'vit' => 'Витебский вокзал' ,
'teh' => 'Технологический Институт'
) ;
'chk' => canGet( 10 , BUS) ,
'gor' => canGet( 3 , SUBWAY)
) ,
'pet' => canGet( 10 , BUS) ,
'spo' => canGet( 3 , SUBWAY)
) ,
'pet' => canGet( 3 , BUS) ,
'kre' => canGet( 5 , FOOT) ,
'gos' => canGet( 6 , SUBWAY)
) ,
'chk' => canGet( 3 , SUBWAY) ,
'vas' => canGet( 10 , BUS) ,
'sen' => canGet( 7 , SUBWAY)
) ,
'spo' => canGet( 10 , BUS) ,
'gos' => canGet( 7 , SUBWAY) ,
'nov' => canGet( 11 , FOOT)
) ,
'gor' => canGet( 5 , FOOT)
) ,
'dvo' => canGet( 6 , FOOT) ,
'gos' => canGet( 7 , FOOT)
) ,
'isa' => canGet( 6 , FOOT) ,
'gos' => canGet( 6 , FOOT) ,
'let' => canGet( 6 , FOOT)
) ,
'dvo' => canGet( 6 , FOOT) ,
'nov' => canGet( 5 , FOOT)
) ,
'vas' => canGet( 11 , FOOT) ,
'isa' => canGet( 5 , FOOT) ,
'ras' => canGet( 7 , BUS)
) ,
'nov' => canGet( 7 , BUS) ,
'sen' => canGet( 3 , FOOT)
) ,
'vas' => canGet( 7 , SUBWAY) ,
'sen' => canGet( 3 , SUBWAY) ,
'dvo' => canGet( 6 , FOOT) ,
'gor' => canGet( 6 , SUBWAY) ,
'let' => canGet( 7 , FOOT) ,
'vla' => canGet( 7 , FOOT)
) ,
'ras' => canGet( 3 , FOOT) ,
'spo' => canGet( 7 , SUBWAY) ,
'gos' => canGet( 3 , SUBWAY) ,
'vla' => canGet( 4 , SUBWAY) ,
'vit' => canGet( 2 , SUBWAY) ,
'teh' => canGet( 3 , SUBWAY)
) ,
'sen' => canGet( 4 , SUBWAY) ,
'gos' => canGet( 7 , FOOT) ,
'vit' => canGet( 3 , SUBWAY)
) ,
'sen' => canGet( 2 , SUBWAY) ,
'teh' => canGet( 2 , SUBWAY) ,
'vla' => canGet( 3 , SUBWAY)
) ,
'sen' => canGet( 3 , SUBWAY) ,
'vit' => canGet( 2 , SUBWAY)
) ,
'' => canGet( 0 , SUBWAY)
)
) ;
/*
* Чтобы не писать много раз array('time' => ..., 'by' => ...), используем функцию.
* «canGet» переводится как «можно попасть»
*/
function canGet( $time , $byWhat )
{
'time' => $time ,
'by' => $byWhat
) ;
}
function makeOneStep( $paths , $pathDone , $time , $tempTime , $point , $target )
{
static $allTimes ;
static $allPaths ;
static $results ;
$pathDone [ ] = $point ;
$time += $tempTime ;
if ( $point == $target ) {
$allTimes [ ] = $time ;
$allPaths [ ] = $pathDone ;
$results [ 'times' ] = $allTimes ;
$results [ 'paths' ] = $allPaths ;
}
foreach ( $paths [ $point ] as $station => $pathInfo ) {
$tempTime = $pathInfo [ 'time' ] ;
$point = $station ;
makeOneStep( $paths , $pathDone , $time , $tempTime , $point , $target ) ;
}
}
return $results ;
}
$routes = makeOneStep( $paths , $pathDone , $time , $tempTime , $startPoint , $endPoint ) ;
printResult( $pointNames , $startPoint , $endPoint , $paths , $routes , $transportName ) ;
$start2 = 'dvo' ;
$end2 = 'vla' ;
$path2 = [ ] ;
$time2 = 0 ;
$tempTime2 = 0 ;
echo "\n \n \n \n " ;
$routes2 = makeOneStep( $paths , $path2 , $time2 , $tempTime2 , $start2 , $end2 ) ;
printResult( $pointNames , $start2 , $end2 , $paths , $routes2 , $transportName ) ;
function printResult( $pointNames , $startPoint , $endPoint , $paths , $routes , $transportName ) {
$fastestTime = min ( $routes [ 'times' ] ) ; $fastestPath = $routes [ 'paths' ] [ array_search ( $fastestTime , $routes [ 'times' ] ) ] ;
echo "Начальная точка: \" $pointNames [$startPoint ]\" \n " ;
$i = 1 ;
$oneStep = $paths [ $fastestPath [ $i - 1 ] ] [ $fastestPath [ $i ] ] ;
for ( $i ; $i < count ( $fastestPath ) ; $i ++ ) { echo "Из нее {$transportName [$oneStep ['by']]} до точки " .
"\" {$pointNames [$fastestPath [$i ]]}\" {$oneStep['time']} мин.\n " ;
}
echo "В итоге ты попадешь в точку \" $pointNames [$endPoint ]\" за $fastestTime мин. Приятной поездки!" ;
}
PD9waHAKZXJyb3JfcmVwb3J0aW5nKC0gMSk7CgpkZWZpbmUoJ1NVQldBWScsICdzdWInKTsKZGVmaW5lKCdGT09UJywgJ2Zvb3QnKTsKZGVmaW5lKCdCVVMnLCAnYnVzJyk7CgokdHJhbnNwb3J0TmFtZSA9IGFycmF5KAogICAgU1VCV0FZID0+ICfQtdC00LXRiNGMINC90LAg0LzQtdGC0YDQvicsCiAgICBGT09UID0+ICfQuNC00LXRiNGMINC/0LXRiNC60L7QvCcsCiAgICBCVVMgPT4gJ9C10LTQtdGI0Ywg0L3QsCDQsNCy0YLQvtCx0YPRgdC1JwopOwoKJHN0YXJ0UG9pbnQgPSAncGV0JzsgLy8g0J/QtdGC0YDQvtCz0YDQsNC00YHQutCw0Y8KJGVuZFBvaW50ID0gJ25vdic7IC8vINCd0L7QstCw0Y8g0JPQvtC70LvQsNC90LTQuNGPCiRwYXRoRG9uZSA9IFtdOwokdGltZSA9IDA7CiR0ZW1wVGltZSA9IDA7CgokcG9pbnROYW1lcyA9IGFycmF5KAogICAgJ3BldCcgPT4gJ9GB0YIuINC8LiDQn9C10YLRgNC+0LPRgNCw0LTRgdC60LDRjycsCiAgICAnY2hrJyA9PiAn0YHRgi4g0LwuINCn0LrQsNC70L7QstGB0LrQsNGPJywKICAgICdnb3InID0+ICfRgdGCLiDQvC4g0JPQvtGA0YzQutC+0LLRgdC60LDRjycsCiAgICAnc3BvJyA9PiAn0YHRgi4g0LwuINCh0L/QvtGA0YLQuNCy0L3QsNGPJywKICAgICd2YXMnID0+ICfRgdGCLiDQvC4g0JLQsNGB0LjQu9C10L7RgdGC0YDQvtCy0YHQutCw0Y8nLAogICAgJ2tyZScgPT4gJ9Cf0LXRgtGA0L7Qv9Cw0LLQu9C+0LLRgdC60LDRjyDQutGA0LXQv9C+0YHRgtGMJywKICAgICdsZXQnID0+ICfQm9C10YLQvdC40Lkg0YHQsNC0JywKICAgICdkdm8nID0+ICfQlNCy0L7RgNGG0L7QstCw0Y8g0L/Qu9C+0YnQsNC00YwnLAogICAgJ2lzYScgPT4gJ9CY0YHQsNC60LjQtdCy0YHQutC40Lkg0YHQvtCx0L7RgCcsCiAgICAnbm92JyA9PiAn0J3QvtCy0LDRjyDQk9C+0LvQu9Cw0L3QtNC40Y8nLAogICAgJ3JhcycgPT4gJ9CU0L7QvCDQoNCw0YHQutC+0LvRjNC90LjQutC+0LLQsCcsCiAgICAnZ29zJyA9PiAn0JPQvtGB0YLQuNC90YvQuSDQlNCy0L7RgCcsCiAgICAnc2VuJyA9PiAn0KHQtdC90L3QsNGPINCf0LvQvtGJ0LDQtNGMJywKICAgICd2bGEnID0+ICfRgdGCLiDQvC4g0JLQu9Cw0LTQuNC80LjRgNGB0LrQsNGPJywKICAgICd2aXQnID0+ICfQktC40YLQtdCx0YHQutC40Lkg0LLQvtC60LfQsNC7JywKICAgICd0ZWgnID0+ICfQotC10YXQvdC+0LvQvtCz0LjRh9C10YHQutC40Lkg0JjQvdGB0YLQuNGC0YPRgicKKTsKCiRwYXRocyA9IGFycmF5KAogICAgJ3BldCcgPT4gYXJyYXkoCiAgICAgICAgJ2NoaycgPT4gY2FuR2V0KDEwLCBCVVMpLAogICAgICAgICdnb3InID0+IGNhbkdldCgzLCBTVUJXQVkpCiAgICApLAogICAgCiAgICAnY2hrJyA9PiBhcnJheSgKICAgICAgICAncGV0JyA9PiBjYW5HZXQoMTAsIEJVUyksCiAgICAgICAgJ3NwbycgPT4gY2FuR2V0KDMsIFNVQldBWSkKICAgICksCiAgICAKICAgICdnb3InID0+IGFycmF5KAogICAgICAgICdwZXQnID0+IGNhbkdldCgzLCBCVVMpLAogICAgICAgICdrcmUnID0+IGNhbkdldCg1LCBGT09UKSwKICAgICAgICAnZ29zJyA9PiBjYW5HZXQoNiwgU1VCV0FZKQogICAgKSwKICAgIAogICAgJ3NwbycgPT4gYXJyYXkoCiAgICAgICAgJ2NoaycgPT4gY2FuR2V0KDMsIFNVQldBWSksCiAgICAgICAgJ3ZhcycgPT4gY2FuR2V0KDEwLCBCVVMpLAogICAgICAgICdzZW4nID0+IGNhbkdldCg3LCBTVUJXQVkpCiAgICApLAogICAgCiAgICAndmFzJyA9PiBhcnJheSgKICAgICAgICAnc3BvJyA9PiBjYW5HZXQoMTAsIEJVUyksCiAgICAgICAgJ2dvcycgPT4gY2FuR2V0KDcsIFNVQldBWSksCiAgICAgICAgJ25vdicgPT4gY2FuR2V0KDExLCBGT09UKQogICAgKSwKICAgIAogICAgJ2tyZScgPT4gYXJyYXkoCiAgICAgICAgJ2dvcicgPT4gY2FuR2V0KDUsIEZPT1QpCiAgICApLAogICAgCiAgICAnbGV0JyA9PiBhcnJheSgKICAgICAgICAnZHZvJyA9PiBjYW5HZXQoNiwgRk9PVCksCiAgICAgICAgJ2dvcycgPT4gY2FuR2V0KDcsIEZPT1QpCiAgICApLAogICAgCiAgICAnZHZvJyA9PiBhcnJheSgKICAgICAgICAnaXNhJyA9PiBjYW5HZXQoNiwgRk9PVCksCiAgICAgICAgJ2dvcycgPT4gY2FuR2V0KDYsIEZPT1QpLAogICAgICAgICdsZXQnID0+IGNhbkdldCg2LCBGT09UKQogICAgKSwKICAgIAogICAgJ2lzYScgPT4gYXJyYXkoCiAgICAgICAgJ2R2bycgPT4gY2FuR2V0KDYsIEZPT1QpLAogICAgICAgICdub3YnID0+IGNhbkdldCg1LCBGT09UKQogICAgKSwKICAgIAogICAgJ25vdicgPT4gYXJyYXkoCiAgICAgICAgJ3ZhcycgPT4gY2FuR2V0KDExLCBGT09UKSwKICAgICAgICAnaXNhJyA9PiBjYW5HZXQoNSwgRk9PVCksCiAgICAgICAgJ3JhcycgPT4gY2FuR2V0KDcsIEJVUykKICAgICksCiAgICAKICAgICdyYXMnID0+IGFycmF5KAogICAgICAgICdub3YnID0+IGNhbkdldCg3LCBCVVMpLAogICAgICAgICdzZW4nID0+IGNhbkdldCgzLCBGT09UKQogICAgKSwKICAgIAogICAgJ2dvcycgPT4gYXJyYXkoCiAgICAgICAgJ3ZhcycgPT4gY2FuR2V0KDcsIFNVQldBWSksCiAgICAgICAgJ3NlbicgPT4gY2FuR2V0KDMsIFNVQldBWSksCiAgICAgICAgJ2R2bycgPT4gY2FuR2V0KDYsIEZPT1QpLAogICAgICAgICdnb3InID0+IGNhbkdldCg2LCBTVUJXQVkpLAogICAgICAgICdsZXQnID0+IGNhbkdldCg3LCBGT09UKSwKICAgICAgICAndmxhJyA9PiBjYW5HZXQoNywgRk9PVCkKICAgICksCiAgICAKICAgICdzZW4nID0+IGFycmF5KAogICAgICAgICdyYXMnID0+IGNhbkdldCgzLCBGT09UKSwKICAgICAgICAnc3BvJyA9PiBjYW5HZXQoNywgU1VCV0FZKSwKICAgICAgICAnZ29zJyA9PiBjYW5HZXQoMywgU1VCV0FZKSwKICAgICAgICAndmxhJyA9PiBjYW5HZXQoNCwgU1VCV0FZKSwKICAgICAgICAndml0JyA9PiBjYW5HZXQoMiwgU1VCV0FZKSwKICAgICAgICAndGVoJyA9PiBjYW5HZXQoMywgU1VCV0FZKQogICAgKSwKICAgIAogICAgJ3ZsYScgPT4gYXJyYXkoCiAgICAgICAgJ3NlbicgPT4gY2FuR2V0KDQsIFNVQldBWSksCiAgICAgICAgJ2dvcycgPT4gY2FuR2V0KDcsIEZPT1QpLAogICAgICAgICd2aXQnID0+IGNhbkdldCgzLCBTVUJXQVkpCiAgICApLAogICAgCiAgICAndml0JyA9PiBhcnJheSgKICAgICAgICAnc2VuJyA9PiBjYW5HZXQoMiwgU1VCV0FZKSwKICAgICAgICAndGVoJyA9PiBjYW5HZXQoMiwgU1VCV0FZKSwKICAgICAgICAndmxhJyA9PiBjYW5HZXQoMywgU1VCV0FZKQogICAgKSwKICAgIAogICAgJ3RlaCcgPT4gYXJyYXkoCiAgICAgICAgJ3NlbicgPT4gY2FuR2V0KDMsIFNVQldBWSksCiAgICAgICAgJ3ZpdCcgPT4gY2FuR2V0KDIsIFNVQldBWSkKICAgICksCiAgICAnJyA9PiBhcnJheSgKICAgICAgICAnJyA9PiBjYW5HZXQoMCwgU1VCV0FZKQogICAgKQopOwoKLyoKICog0KfRgtC+0LHRiyDQvdC1INC/0LjRgdCw0YLRjCDQvNC90L7Qs9C+INGA0LDQtyBhcnJheSgndGltZScgPT4gLi4uLCAnYnknID0+IC4uLiksINC40YHQv9C+0LvRjNC30YPQtdC8INGE0YPQvdC60YbQuNGOLgogKiDCq2NhbkdldMK7INC/0LXRgNC10LLQvtC00LjRgtGB0Y8g0LrQsNC6IMKr0LzQvtC20L3QviDQv9C+0L/QsNGB0YLRjMK7CiAqLwpmdW5jdGlvbiBjYW5HZXQoJHRpbWUsICRieVdoYXQpCnsKICAgIHJldHVybiBhcnJheSgKICAgICAgICAndGltZScgPT4gJHRpbWUsCiAgICAgICAgJ2J5JyA9PiAkYnlXaGF0CiAgICApOwp9CgpmdW5jdGlvbiBtYWtlT25lU3RlcCgkcGF0aHMsICRwYXRoRG9uZSwgJHRpbWUsICR0ZW1wVGltZSwgJHBvaW50LCAkdGFyZ2V0KQp7CiAgICBzdGF0aWMgJGFsbFRpbWVzOwogICAgc3RhdGljICRhbGxQYXRoczsKICAgIHN0YXRpYyAkcmVzdWx0czsKICAgICRwYXRoRG9uZVtdID0gJHBvaW50OwogICAgJHRpbWUgKz0gJHRlbXBUaW1lOwogICAgaWYgKCRwb2ludCA9PSAkdGFyZ2V0KSB7CiAgICAgICAgJGFsbFRpbWVzW10gPSAkdGltZTsKICAgICAgICAkYWxsUGF0aHNbXSA9ICRwYXRoRG9uZTsKICAgICAgICAkcmVzdWx0c1sndGltZXMnXSA9ICRhbGxUaW1lczsKICAgICAgICAkcmVzdWx0c1sncGF0aHMnXSA9ICRhbGxQYXRoczsgICAgICAKICAgIH0KICAgIGZvcmVhY2ggKCRwYXRoc1skcG9pbnRdIGFzICRzdGF0aW9uID0+ICRwYXRoSW5mbykgewogICAgICAgIGlmICghIGluX2FycmF5KCRzdGF0aW9uLCAkcGF0aERvbmUpKSB7CiAgICAgICAgICAgICR0ZW1wVGltZSA9ICRwYXRoSW5mb1sndGltZSddOwogICAgICAgICAgICAkcG9pbnQgPSAkc3RhdGlvbjsKICAgICAgICAgICAgbWFrZU9uZVN0ZXAoJHBhdGhzLCAkcGF0aERvbmUsICR0aW1lLCAkdGVtcFRpbWUsICRwb2ludCwgJHRhcmdldCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRyZXN1bHRzOwp9Cgokcm91dGVzPW1ha2VPbmVTdGVwKCRwYXRocywgJHBhdGhEb25lLCAkdGltZSwgJHRlbXBUaW1lLCAkc3RhcnRQb2ludCwgJGVuZFBvaW50KTsKcHJpbnRSZXN1bHQoJHBvaW50TmFtZXMsICRzdGFydFBvaW50LCAkZW5kUG9pbnQsICRwYXRocywgJHJvdXRlcywgJHRyYW5zcG9ydE5hbWUpOwoKJHN0YXJ0MiA9ICdkdm8nOwokZW5kMiA9ICd2bGEnOwokcGF0aDIgPSBbXTsKJHRpbWUyID0gMDsKJHRlbXBUaW1lMiA9IDA7CgplY2hvICJcblxuXG5cbiI7CiRyb3V0ZXMyPW1ha2VPbmVTdGVwKCRwYXRocywgJHBhdGgyLCAkdGltZTIsICR0ZW1wVGltZTIsICRzdGFydDIsICRlbmQyKTsKcHJpbnRSZXN1bHQoJHBvaW50TmFtZXMsICRzdGFydDIsICRlbmQyLCAkcGF0aHMsICRyb3V0ZXMyLCAkdHJhbnNwb3J0TmFtZSk7CgpmdW5jdGlvbiBwcmludFJlc3VsdCgkcG9pbnROYW1lcywgJHN0YXJ0UG9pbnQsICRlbmRQb2ludCwgJHBhdGhzLCAkcm91dGVzLCAkdHJhbnNwb3J0TmFtZSkgewogICAgJGZhc3Rlc3RUaW1lID0gbWluKCRyb3V0ZXNbJ3RpbWVzJ10pOwogICAgJGZhc3Rlc3RQYXRoID0gJHJvdXRlc1sncGF0aHMnXVthcnJheV9zZWFyY2goJGZhc3Rlc3RUaW1lLCAkcm91dGVzWyd0aW1lcyddKV07CiAgICAKICAgIGVjaG8gItCd0LDRh9Cw0LvRjNC90LDRjyDRgtC+0YfQutCwOiBcIiRwb2ludE5hbWVzWyRzdGFydFBvaW50XVwiXG4iOwogICAgJGkgPSAxOwogICAgJG9uZVN0ZXAgPSAkcGF0aHNbJGZhc3Rlc3RQYXRoWyRpLTFdXVskZmFzdGVzdFBhdGhbJGldXTsKICAgIGZvciAoJGk7ICRpIDwgY291bnQoJGZhc3Rlc3RQYXRoKTsgJGkgKyspIHsKICAgICAgICBlY2hvICLQmNC3INC90LXQtSB7JHRyYW5zcG9ydE5hbWVbJG9uZVN0ZXBbJ2J5J11dfSDQtNC+INGC0L7Rh9C60LggIi4KICAgICAgICAiXCJ7JHBvaW50TmFtZXNbJGZhc3Rlc3RQYXRoWyRpXV19XCIgeyRvbmVTdGVwWyd0aW1lJ119INC80LjQvS5cbiI7CiAgICB9CiAgICBlY2hvICLQkiDQuNGC0L7Qs9C1INGC0Ysg0L/QvtC/0LDQtNC10YjRjCDQsiDRgtC+0YfQutGDIFwiJHBvaW50TmFtZXNbJGVuZFBvaW50XVwiINC30LAgJGZhc3Rlc3RUaW1lINC80LjQvS4g0J/RgNC40Y/RgtC90L7QuSDQv9C+0LXQt9C00LrQuCEiOwp9CgoKCgoKCg==