<?php
/* http://d...content-available-to-author-only...2.net/ */
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)
)
);
/* Чтобы не писать много раз array('time' => ..., 'by' => ...), используем функцию.
«canGet» переводится как «можно попасть» */
function canGet($time, $byWhat) {
return array('time' => $time, 'by' => $byWhat); }
/*заполняем массив, который будет содержать метки для каждой из вершин а также
массив, в котором ведем учет уже проверенных вершин */
foreach ($paths as $point => $details) {
if ($point == $startPoint) {
$marks[$point] = 0;
$roads[$point] = "Из {$pointNames[$point]}";
}
else {
$marks[$point] = 999;
}
$unChecked[$point] = $marks[$point];
}
while (!empty($unChecked)) {
unset($unChecked[$curr]);
$neighbours = $paths[$curr];
foreach ($neighbours as $station => $details) {
if ( ($details["time"] + $marks[$curr]) < $marks[$station] ) {
$marks[$station] = $details["time"] + $marks[$curr];
$transport = $details["by"];
//var_dump($transportName[$details["by"]]);
$roads[$station] = "{$roads[$curr]} {$transportName[$transport]} до {$pointNames[$station]} - {$details["time"]} минут.\n"; $roads[$station] .= ($station == $endPoint) ? "В итоге ты попадаешь в точку {$pointNames[$station]} за {$marks[$station]} минут.\n" :
"Из неё";
}
}
}
echo $roads[$endPoint];
PD9waHAKIAplcnJvcl9yZXBvcnRpbmcoLTEpOwovKiBodHRwOi8vZC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uMi5uZXQvICovCiBtYl9pbnRlcm5hbF9lbmNvZGluZygidXRmLTgiKTsKIApkZWZpbmUoJ1NVQldBWScsICdzdWInKTsKZGVmaW5lKCdGT09UJywgJ2Zvb3QnKTsKZGVmaW5lKCdCVVMnLCAnYnVzJyk7CiAKJHRyYW5zcG9ydE5hbWUgPSBhcnJheSgKU1VCV0FZID0+ICfQtdC00LXRiNGMINC90LAg0LzQtdGC0YDQvicsCkZPT1QgPT4gJ9C40LTQtdGI0Ywg0L/QtdGI0LrQvtC8JywKQlVTID0+ICfQtdC00LXRiNGMINC90LAg0LDQstGC0L7QsdGD0YHQtScKKTsKIAokc3RhcnRQb2ludCA9ICdwZXQnOyAvLyDQn9C10YLRgNC+0LPRgNCw0LTRgdC60LDRjwokZW5kUG9pbnQgPSAnbm92JzsgLy8g0J3QvtCy0LDRjyDQk9C+0LvQu9Cw0L3QtNC40Y8KIAokcG9pbnROYW1lcyA9IGFycmF5KAoncGV0JyA9PiAn0YHRgi4g0LwuINCf0LXRgtGA0L7Qs9GA0LDQtNGB0LrQsNGPJywKJ2NoaycgPT4gJ9GB0YIuINC8LiDQp9C60LDQu9C+0LLRgdC60LDRjycsCidnb3InID0+ICfRgdGCLiDQvC4g0JPQvtGA0YzQutC+0LLRgdC60LDRjycsCidzcG8nID0+ICfRgdGCLiDQvC4g0KHQv9C+0YDRgtC40LLQvdCw0Y8nLAondmFzJyA9PiAn0YHRgi4g0LwuINCS0LDRgdC40LvQtdC+0YHRgtGA0L7QstGB0LrQsNGPJywKJ2tyZScgPT4gJ9Cf0LXRgtGA0L7Qv9Cw0LLQu9C+0LLRgdC60LDRjyDQutGA0LXQv9C+0YHRgtGMJywKJ2xldCcgPT4gJ9Cb0LXRgtC90LjQuSDRgdCw0LQnLAonZHZvJyA9PiAn0JTQstC+0YDRhtC+0LLQsNGPINC/0LvQvtGJ0LDQtNGMJywKJ2lzYScgPT4gJ9CY0YHQsNC60LjQtdCy0YHQutC40Lkg0YHQvtCx0L7RgCcsCidub3YnID0+ICfQndC+0LLQsNGPINCT0L7Qu9C70LDQvdC00LjRjycsCidyYXMnID0+ICfQlNC+0Lwg0KDQsNGB0LrQvtC70YzQvdC40LrQvtCy0LAnLAonZ29zJyA9PiAn0JPQvtGB0YLQuNC90YvQuSDQlNCy0L7RgCcsCidzZW4nID0+ICfQodC10L3QvdCw0Y8g0J/Qu9C+0YnQsNC00YwnLAondmxhJyA9PiAn0YHRgi4g0LwuINCS0LvQsNC00LjQvNC40YDRgdC60LDRjycsCid2aXQnID0+ICfQktC40YLQtdCx0YHQutC40Lkg0LLQvtC60LfQsNC7JywKJ3RlaCcgPT4gJ9Ci0LXRhdC90L7Qu9C+0LPQuNGH0LXRgdC60LjQuSDQmNC90YHRgtC40YLRg9GCJwopOwogCiRwYXRocyA9IGFycmF5KAoKJ3BldCcgPT4gYXJyYXkoCidjaGsnID0+IGNhbkdldCgxMCwgQlVTKSwKJ2dvcicgPT4gY2FuR2V0KDMsIFNVQldBWSkKKSwKIAonY2hrJyA9PiBhcnJheSgKJ3BldCcgPT4gY2FuR2V0KDEwLCBCVVMpLAonc3BvJyA9PiBjYW5HZXQoMywgU1VCV0FZKQopLAogCidnb3InID0+IGFycmF5KAoncGV0JyA9PiBjYW5HZXQoMywgQlVTKSwKJ2tyZScgPT4gY2FuR2V0KDUsIEZPT1QpLAonZ29zJyA9PiBjYW5HZXQoNiwgU1VCV0FZKQopLAogCidzcG8nID0+IGFycmF5KAonY2hrJyA9PiBjYW5HZXQoMywgU1VCV0FZKSwKJ3ZhcycgPT4gY2FuR2V0KDEwLCBCVVMpLAonc2VuJyA9PiBjYW5HZXQoNywgU1VCV0FZKQopLAogCid2YXMnID0+IGFycmF5KAonc3BvJyA9PiBjYW5HZXQoMTAsIEJVUyksCidnb3MnID0+IGNhbkdldCg3LCBTVUJXQVkpLAonbm92JyA9PiBjYW5HZXQoMTEsIEZPT1QpCiksCiAKJ2tyZScgPT4gYXJyYXkoCidnb3InID0+IGNhbkdldCg1LCBGT09UKQopLAogCidsZXQnID0+IGFycmF5KAonZHZvJyA9PiBjYW5HZXQoNiwgRk9PVCksCidnb3MnID0+IGNhbkdldCg3LCBGT09UKQopLAogCidkdm8nID0+IGFycmF5KAonaXNhJyA9PiBjYW5HZXQoNiwgRk9PVCksCidnb3MnID0+IGNhbkdldCg2LCBGT09UKSwKJ2xldCcgPT4gY2FuR2V0KDYsIEZPT1QpCiksCiAKJ2lzYScgPT4gYXJyYXkoCidkdm8nID0+IGNhbkdldCg2LCBGT09UKSwKJ25vdicgPT4gY2FuR2V0KDUsIEZPT1QpCiksCiAKJ25vdicgPT4gYXJyYXkoCid2YXMnID0+IGNhbkdldCgxMSwgRk9PVCksCidpc2EnID0+IGNhbkdldCg1LCBGT09UKSwKJ3JhcycgPT4gY2FuR2V0KDcsIEJVUykKKSwKIAoncmFzJyA9PiBhcnJheSgKJ25vdicgPT4gY2FuR2V0KDcsIEJVUyksCidzZW4nID0+IGNhbkdldCgzLCBGT09UKQopLAogCidnb3MnID0+IGFycmF5KAondmFzJyA9PiBjYW5HZXQoNywgU1VCV0FZKSwKJ3NlbicgPT4gY2FuR2V0KDMsIFNVQldBWSksCidkdm8nID0+IGNhbkdldCg2LCBGT09UKSwKJ2dvcicgPT4gY2FuR2V0KDYsIFNVQldBWSksCidsZXQnID0+IGNhbkdldCg3LCBGT09UKSwKJ3ZsYScgPT4gY2FuR2V0KDcsIEZPT1QpCiksCiAKJ3NlbicgPT4gYXJyYXkoCidyYXMnID0+IGNhbkdldCgzLCBGT09UKSwKJ3NwbycgPT4gY2FuR2V0KDcsIFNVQldBWSksCidnb3MnID0+IGNhbkdldCgzLCBTVUJXQVkpLAondmxhJyA9PiBjYW5HZXQoNCwgU1VCV0FZKSwKJ3ZpdCcgPT4gY2FuR2V0KDIsIFNVQldBWSksCid0ZWgnID0+IGNhbkdldCgzLCBTVUJXQVkpCiksCiAKJ3ZsYScgPT4gYXJyYXkoCidzZW4nID0+IGNhbkdldCg0LCBTVUJXQVkpLAonZ29zJyA9PiBjYW5HZXQoNywgRk9PVCksCid2aXQnID0+IGNhbkdldCgzLCBTVUJXQVkpCiksCiAKJ3ZpdCcgPT4gYXJyYXkoCidzZW4nID0+IGNhbkdldCgyLCBTVUJXQVkpLAondGVoJyA9PiBjYW5HZXQoMiwgU1VCV0FZKSwKJ3ZsYScgPT4gY2FuR2V0KDMsIFNVQldBWSkKKSwKIAondGVoJyA9PiBhcnJheSgKJ3NlbicgPT4gY2FuR2V0KDMsIFNVQldBWSksCid2aXQnID0+IGNhbkdldCgyLCBTVUJXQVkpCikKKTsKIAovKiDQp9GC0L7QsdGLINC90LUg0L/QuNGB0LDRgtGMINC80L3QvtCz0L4g0YDQsNC3IGFycmF5KCd0aW1lJyA9PiAuLi4sICdieScgPT4gLi4uKSwg0LjRgdC/0L7Qu9GM0LfRg9C10Lwg0YTRg9C90LrRhtC40Y4uCiAgwqtjYW5HZXTCuyDQv9C10YDQtdCy0L7QtNC40YLRgdGPINC60LDQuiDCq9C80L7QttC90L4g0L/QvtC/0LDRgdGC0YzCuyAqLwpmdW5jdGlvbiBjYW5HZXQoJHRpbWUsICRieVdoYXQpIHsKcmV0dXJuIGFycmF5KCd0aW1lJyA9PiAkdGltZSwgJ2J5JyA9PiAkYnlXaGF0KTsKfQoKLyrQt9Cw0L/QvtC70L3Rj9C10Lwg0LzQsNGB0YHQuNCyLCDQutC+0YLQvtGA0YvQuSDQsdGD0LTQtdGCINGB0L7QtNC10YDQttCw0YLRjCDQvNC10YLQutC4INC00LvRjyDQutCw0LbQtNC+0Lkg0LjQtyDQstC10YDRiNC40L0g0LAg0YLQsNC60LbQtQog0LzQsNGB0YHQuNCyLCDQsiDQutC+0YLQvtGA0L7QvCDQstC10LTQtdC8INGD0YfQtdGCINGD0LbQtSDQv9GA0L7QstC10YDQtdC90L3Ri9GFINCy0LXRgNGI0LjQvSAqLwokdW5DaGVja2VkID0gYXJyYXkoKTsKJG1hcmtzID0gYXJyYXkoKTsKJHJvYWRzID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRwYXRocyBhcyAkcG9pbnQgPT4gJGRldGFpbHMpIHsKCiAgaWYgKCRwb2ludCA9PSAkc3RhcnRQb2ludCkgewogICAgJG1hcmtzWyRwb2ludF0gPSAwOwogICAgJHJvYWRzWyRwb2ludF0gPSAi0JjQtyB7JHBvaW50TmFtZXNbJHBvaW50XX0iOwogIH0KICBlbHNlIHsKICAgICRtYXJrc1skcG9pbnRdID0gOTk5OwogIH0KCiAgJHVuQ2hlY2tlZFskcG9pbnRdID0gJG1hcmtzWyRwb2ludF07Cn0KCndoaWxlICghZW1wdHkoJHVuQ2hlY2tlZCkpIHsKCiAgICAkbWluID0gbWluKGFycmF5X2tleXMoKGFycmF5X2ZsaXAoJHVuQ2hlY2tlZCkpKSk7CiAgICAkY3VyciA9IGFycmF5X2ZsaXAoJHVuQ2hlY2tlZClbJG1pbl07CgogICAgdW5zZXQoJHVuQ2hlY2tlZFskY3Vycl0pOwoKICAgICRuZWlnaGJvdXJzID0gJHBhdGhzWyRjdXJyXTsKCiAgICBmb3JlYWNoICgkbmVpZ2hib3VycyBhcyAkc3RhdGlvbiA9PiAkZGV0YWlscykgewogICAgICBpZiAoICgkZGV0YWlsc1sidGltZSJdICsgJG1hcmtzWyRjdXJyXSkgPCAkbWFya3NbJHN0YXRpb25dICkgewogICAgICAgICRtYXJrc1skc3RhdGlvbl0gPSAkZGV0YWlsc1sidGltZSJdICsgJG1hcmtzWyRjdXJyXTsKICAgICAgICAkdHJhbnNwb3J0ID0gJGRldGFpbHNbImJ5Il07CgogICAgICAgIC8vdmFyX2R1bXAoJHRyYW5zcG9ydE5hbWVbJGRldGFpbHNbImJ5Il1dKTsKICAgICAgICAKICAgICAgICAkcm9hZHNbJHN0YXRpb25dID0gInskcm9hZHNbJGN1cnJdfSB7JHRyYW5zcG9ydE5hbWVbJHRyYW5zcG9ydF19INC00L4geyRwb2ludE5hbWVzWyRzdGF0aW9uXX0gLSB7JGRldGFpbHNbInRpbWUiXX0g0LzQuNC90YPRgi5cbiI7CiAgICAgICAgJHJvYWRzWyRzdGF0aW9uXSAuPSAoJHN0YXRpb24gPT0gJGVuZFBvaW50KSA/ICLQkiDQuNGC0L7Qs9C1INGC0Ysg0L/QvtC/0LDQtNCw0LXRiNGMINCyINGC0L7Rh9C60YMgeyRwb2ludE5hbWVzWyRzdGF0aW9uXX0g0LfQsCB7JG1hcmtzWyRzdGF0aW9uXX0g0LzQuNC90YPRgi5cbiIgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi0JjQtyDQvdC10ZEiOwogICAgICB9CiAgICB9Cn0KCiBlY2hvICRyb2Fkc1skZW5kUG9pbnRdOwoK