<?php
SUBWAY => 'едешь на метро',
FOOT => 'идешь пешком',
BUS => 'едешь на автобусе'
);
$startPoint = 'pet'; // Петроградская
$endPoint = 'nov'; // Новая Голландия
'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)
)
);
function canGet($time, $byWhat) {
return array('time' => $time, 'by' => $byWhat); }
function make1step($paths, $pathDone, $time, $point, $target){
$result['time'] = 0;
$result['path'] = $pathDone;
$result['time'] = $time;
if(isset($paths[$point][$target])){ $result['time'] += $paths[$point][$target]['time'];
$result['path'][] = $target;
return $result;
}
else
foreach($paths[$point] as $station => $values){
$step = make1step($paths, $result['path'], $result['time'], $station, $target);
//var_dump($step);
if(in_array($step['path'][count($step['path'])-1], $result['path'])) continue; $result['path'][] = $step['path'][count($step['path'])-1]; $result['time'] += $step['time'];
//if ($step['path'][count($step['path'])-1] == $target) break;
}
}
$output="Начальная точка: ". $pointNames[$startPoint] . "\n";
$pathDone[]=$startPoint;
$time = 0;
$onestep = make1step($paths, $pathDone, $time, 'pet', 'spo');
for ($i=1; $i<count($onestep['path']); $i++){ $output .="Из нее ".
$transportName[$paths[$onestep['path'][$i-1]][$onestep['path'][$i]]['by']]
. " до точки " . $pointNames[$onestep['path'][$i]] . " "
. $paths[$onestep['path'][$i-1]][$onestep['path'][$i]]['time']
. " мин \n";
}
echo $output;
echo "Всего:" . $onestep['time'] . " мин.";
PD9waHAKZXJyb3JfcmVwb3J0aW5nKC0xKTsKCmRlZmluZSgnU1VCV0FZJywgJ3N1YicpOwpkZWZpbmUoJ0ZPT1QnLCAnZm9vdCcpOwpkZWZpbmUoJ0JVUycsICdidXMnKTsKCiR0cmFuc3BvcnROYW1lID0gYXJyYXkoCiAgICBTVUJXQVkgID0+ICAn0LXQtNC10YjRjCDQvdCwINC80LXRgtGA0L4nLAogICAgRk9PVCAgICA9PiAgJ9C40LTQtdGI0Ywg0L/QtdGI0LrQvtC8JywKICAgIEJVUyAgICAgPT4gICfQtdC00LXRiNGMINC90LAg0LDQstGC0L7QsdGD0YHQtScKKTsKCiRzdGFydFBvaW50ID0gJ3BldCc7IC8vINCf0LXRgtGA0L7Qs9GA0LDQtNGB0LrQsNGPCiRlbmRQb2ludCA9ICdub3YnOyAvLyDQndC+0LLQsNGPINCT0L7Qu9C70LDQvdC00LjRjwoKJHBvaW50TmFtZXMgPSBhcnJheSgKICAgICdwZXQnICAgPT4gICfRgdGCLiDQvC4g0J/QtdGC0YDQvtCz0YDQsNC00YHQutCw0Y8nLAogICAgJ2NoaycgICA9PiAgJ9GB0YIuINC8LiDQp9C60LDQu9C+0LLRgdC60LDRjycsCiAgICAnZ29yJyAgID0+ICAn0YHRgi4g0LwuINCT0L7RgNGM0LrQvtCy0YHQutCw0Y8nLAogICAgJ3NwbycgICA9PiAgJ9GB0YIuINC8LiDQodC/0L7RgNGC0LjQstC90LDRjycsCiAgICAndmFzJyAgID0+ICAn0YHRgi4g0LwuINCS0LDRgdC40LvQtdC+0YHRgtGA0L7QstGB0LrQsNGPJywKICAgICdrcmUnICAgPT4gICfQn9C10YLRgNC+0L/QsNCy0LvQvtCy0YHQutCw0Y8g0LrRgNC10L/QvtGB0YLRjCcsCiAgICAnbGV0JyAgID0+ICAn0JvQtdGC0L3QuNC5INGB0LDQtCcsCiAgICAnZHZvJyAgID0+ICAn0JTQstC+0YDRhtC+0LLQsNGPINC/0LvQvtGJ0LDQtNGMJywKICAgICdpc2EnICAgPT4gICfQmNGB0LDQutC40LXQstGB0LrQuNC5INGB0L7QsdC+0YAnLAogICAgJ25vdicgICA9PiAgJ9Cd0L7QstCw0Y8g0JPQvtC70LvQsNC90LTQuNGPJywKICAgICdyYXMnICAgPT4gICfQlNC+0Lwg0KDQsNGB0LrQvtC70YzQvdC40LrQvtCy0LAnLAogICAgJ2dvcycgICA9PiAgJ9CT0L7RgdGC0LjQvdGL0Lkg0JTQstC+0YAnLAogICAgJ3NlbicgICA9PiAgJ9Ch0LXQvdC90LDRjyDQn9C70L7RidCw0LTRjCcsCiAgICAndmxhJyAgID0+ICAn0YHRgi4g0LwuINCS0LvQsNC00LjQvNC40YDRgdC60LDRjycsCiAgICAndml0JyAgID0+ICAn0JLQuNGC0LXQsdGB0LrQuNC5INCy0L7QutC30LDQuycsCiAgICAndGVoJyAgID0+ICAn0KLQtdGF0L3QvtC70L7Qs9C40YfQtdGB0LrQuNC5INCY0L3RgdGC0LjRgtGD0YInCik7CgokcGF0aHMgPSBhcnJheSgKICAgICdwZXQnICAgPT4gIGFycmF5KAogICAgICAgICdjaGsnICAgPT4gIGNhbkdldCgxMCwgQlVTKSwKICAgICAgICAnZ29yJyAgID0+ICBjYW5HZXQoMywgU1VCV0FZKQogICAgKSwKCiAgICAnY2hrJyAgID0+ICBhcnJheSgKICAgICAgICAncGV0JyAgID0+ICBjYW5HZXQoMTAsIEJVUyksCiAgICAgICAgJ3NwbycgICA9PiAgY2FuR2V0KDMsIFNVQldBWSkKICAgICksCgogICAgJ2dvcicgICA9PiAgYXJyYXkoCiAgICAgICAgJ3BldCcgICA9PiAgY2FuR2V0KDMsIEJVUyksCiAgICAgICAgJ2tyZScgICA9PiAgY2FuR2V0KDUsIEZPT1QpLAogICAgICAgICdnb3MnICAgPT4gIGNhbkdldCg2LCBTVUJXQVkpCiAgICApLAoKICAgICdzcG8nICAgPT4gIGFycmF5KAogICAgICAgICdjaGsnICAgPT4gIGNhbkdldCgzLCBTVUJXQVkpLAogICAgICAgICd2YXMnICAgPT4gIGNhbkdldCgxMCwgQlVTKSwKICAgICAgICAnc2VuJyAgID0+ICBjYW5HZXQoNywgU1VCV0FZKQogICAgKSwKCiAgICAndmFzJyAgID0+ICBhcnJheSgKICAgICAgICAnc3BvJyAgID0+ICBjYW5HZXQoMTAsIEJVUyksCiAgICAgICAgJ2dvcycgICA9PiAgY2FuR2V0KDcsIFNVQldBWSksCiAgICAgICAgJ25vdicgICA9PiAgY2FuR2V0KDExLCBGT09UKQogICAgKSwKCiAgICAna3JlJyAgID0+ICBhcnJheSgKICAgICAgICAnZ29yJyAgID0+ICBjYW5HZXQoNSwgRk9PVCkKICAgICksCgogICAgJ2xldCcgICA9PiAgYXJyYXkoCiAgICAgICAgJ2R2bycgICA9PiAgY2FuR2V0KDYsIEZPT1QpLAogICAgICAgICdnb3MnICAgPT4gIGNhbkdldCg3LCBGT09UKQogICAgKSwKCiAgICAnZHZvJyAgID0+ICBhcnJheSgKICAgICAgICAnaXNhJyAgID0+ICBjYW5HZXQoNiwgRk9PVCksCiAgICAgICAgJ2dvcycgICA9PiAgY2FuR2V0KDYsIEZPT1QpLAogICAgICAgICdsZXQnICAgPT4gIGNhbkdldCg2LCBGT09UKQogICAgKSwKCiAgICAnaXNhJyAgID0+ICBhcnJheSgKICAgICAgICAnZHZvJyAgID0+ICBjYW5HZXQoNiwgRk9PVCksCiAgICAgICAgJ25vdicgICA9PiAgY2FuR2V0KDUsIEZPT1QpCiAgICApLAoKICAgICdub3YnICAgPT4gIGFycmF5KAogICAgICAgICd2YXMnICAgPT4gIGNhbkdldCgxMSwgRk9PVCksCiAgICAgICAgJ2lzYScgICA9PiAgY2FuR2V0KDUsIEZPT1QpLAogICAgICAgICdyYXMnICAgPT4gIGNhbkdldCg3LCBCVVMpCiAgICApLAoKICAgICdyYXMnICAgPT4gIGFycmF5KAogICAgICAgICdub3YnICAgPT4gIGNhbkdldCg3LCBCVVMpLAogICAgICAgICdzZW4nICAgPT4gIGNhbkdldCgzLCBGT09UKQogICAgKSwKCiAgICAnZ29zJyAgID0+ICBhcnJheSgKICAgICAgICAndmFzJyAgID0+ICBjYW5HZXQoNywgU1VCV0FZKSwKICAgICAgICAnc2VuJyAgID0+ICBjYW5HZXQoMywgU1VCV0FZKSwKICAgICAgICAnZHZvJyAgID0+ICBjYW5HZXQoNiwgRk9PVCksCiAgICAgICAgJ2dvcicgICA9PiAgY2FuR2V0KDYsIFNVQldBWSksCiAgICAgICAgJ2xldCcgICA9PiAgY2FuR2V0KDcsIEZPT1QpLAogICAgICAgICd2bGEnICAgPT4gIGNhbkdldCg3LCBGT09UKSAgICAgICAgCiAgICApLAoKICAgICdzZW4nICAgPT4gIGFycmF5KAogICAgICAgICdyYXMnICAgPT4gIGNhbkdldCgzLCBGT09UKSwKICAgICAgICAnc3BvJyAgID0+ICBjYW5HZXQoNywgU1VCV0FZKSwKICAgICAgICAnZ29zJyAgID0+ICBjYW5HZXQoMywgU1VCV0FZKSwKICAgICAgICAndmxhJyAgID0+ICBjYW5HZXQoNCwgU1VCV0FZKSwKICAgICAgICAndml0JyAgID0+ICBjYW5HZXQoMiwgU1VCV0FZKSwKICAgICAgICAndGVoJyAgID0+ICBjYW5HZXQoMywgU1VCV0FZKQogICAgKSwKCiAgICAndmxhJyAgID0+ICBhcnJheSgKICAgICAgICAnc2VuJyAgID0+ICBjYW5HZXQoNCwgU1VCV0FZKSwKICAgICAgICAnZ29zJyAgID0+ICBjYW5HZXQoNywgRk9PVCksCiAgICAgICAgJ3ZpdCcgICA9PiAgY2FuR2V0KDMsIFNVQldBWSkKICAgICksCgogICAgJ3ZpdCcgICA9PiAgYXJyYXkoCiAgICAgICAgJ3NlbicgICA9PiAgY2FuR2V0KDIsIFNVQldBWSksCiAgICAgICAgJ3RlaCcgICA9PiAgY2FuR2V0KDIsIFNVQldBWSksCiAgICAgICAgJ3ZsYScgICA9PiAgY2FuR2V0KDMsIFNVQldBWSkKICAgICksCgogICAgJ3RlaCcgICA9PiAgYXJyYXkoCiAgICAgICAgJ3NlbicgICA9PiAgY2FuR2V0KDMsIFNVQldBWSksCiAgICAgICAgJ3ZpdCcgICA9PiAgY2FuR2V0KDIsIFNVQldBWSkgICAgICAgIAogICAgKQopOwoKZnVuY3Rpb24gY2FuR2V0KCR0aW1lLCAkYnlXaGF0KSB7CiAgICByZXR1cm4gYXJyYXkoJ3RpbWUnICAgICA9PiAgJHRpbWUsICdieScgPT4gICRieVdoYXQpOwp9CgpmdW5jdGlvbiBtYWtlMXN0ZXAoJHBhdGhzLCAkcGF0aERvbmUsICR0aW1lLCAkcG9pbnQsICR0YXJnZXQpewkKCSRyZXN1bHQ9YXJyYXkoKTsKCSRyZXN1bHRbJ3RpbWUnXSA9IDA7CgkkcmVzdWx0WydwYXRoJ10gPSAkcGF0aERvbmU7CgkkcmVzdWx0Wyd0aW1lJ10gPSAkdGltZTsKCWlmKGlzc2V0KCRwYXRoc1skcG9pbnRdWyR0YXJnZXRdKSl7CgkJJHJlc3VsdFsndGltZSddICs9ICRwYXRoc1skcG9pbnRdWyR0YXJnZXRdWyd0aW1lJ107CgkJJHJlc3VsdFsncGF0aCddW10gPSAkdGFyZ2V0OwoJCXJldHVybiAkcmVzdWx0OwoJfQoJZWxzZQoJCWZvcmVhY2goJHBhdGhzWyRwb2ludF0gYXMgJHN0YXRpb24gPT4gJHZhbHVlcyl7CgkJCQkkc3RlcCA9IG1ha2Uxc3RlcCgkcGF0aHMsICRyZXN1bHRbJ3BhdGgnXSwgJHJlc3VsdFsndGltZSddLCAkc3RhdGlvbiwgJHRhcmdldCk7CgkJCQkvL3Zhcl9kdW1wKCRzdGVwKTsKCQkJCWlmKGluX2FycmF5KCRzdGVwWydwYXRoJ11bY291bnQoJHN0ZXBbJ3BhdGgnXSktMV0sICRyZXN1bHRbJ3BhdGgnXSkpIGNvbnRpbnVlOwoJCQkJJHJlc3VsdFsncGF0aCddW10gPSAkc3RlcFsncGF0aCddW2NvdW50KCRzdGVwWydwYXRoJ10pLTFdOwoJCQkJJHJlc3VsdFsndGltZSddICs9ICRzdGVwWyd0aW1lJ107CgkJCQkvL2lmICgkc3RlcFsncGF0aCddW2NvdW50KCRzdGVwWydwYXRoJ10pLTFdID09ICR0YXJnZXQpIGJyZWFrOwoJCX0KCQoJfQokb3V0cHV0PSLQndCw0YfQsNC70YzQvdCw0Y8g0YLQvtGH0LrQsDogIi4gJHBvaW50TmFtZXNbJHN0YXJ0UG9pbnRdIC4gIlxuIjsKJHBhdGhEb25lID0gYXJyYXkoKTsgCiRwYXRoRG9uZVtdPSRzdGFydFBvaW50OwokdGltZSA9IDA7CiRvbmVzdGVwID0gbWFrZTFzdGVwKCRwYXRocywgJHBhdGhEb25lLCAkdGltZSwgJ3BldCcsICdzcG8nKTsKZm9yICgkaT0xOyAkaTxjb3VudCgkb25lc3RlcFsncGF0aCddKTsgJGkrKyl7Cgkkb3V0cHV0IC49ItCY0Lcg0L3QtdC1ICIuIAoJJHRyYW5zcG9ydE5hbWVbJHBhdGhzWyRvbmVzdGVwWydwYXRoJ11bJGktMV1dWyRvbmVzdGVwWydwYXRoJ11bJGldXVsnYnknXV0gCgkuICIg0LTQviDRgtC+0YfQutC4ICIgLiAkcG9pbnROYW1lc1skb25lc3RlcFsncGF0aCddWyRpXV0gIC4gIiAiIAoJLiAkcGF0aHNbJG9uZXN0ZXBbJ3BhdGgnXVskaS0xXV1bJG9uZXN0ZXBbJ3BhdGgnXVskaV1dWyd0aW1lJ10gIAoJLiAiINC80LjQvSBcbiI7CQp9CmVjaG8gJG91dHB1dDsKZWNobyAi0JLRgdC10LPQvjoiIC4gJG9uZXN0ZXBbJ3RpbWUnXSAuICIg0LzQuNC9LiI7