Ваш график начинается с узлов «вне Музея X» и пересекает дороги между ними.
Вам нужна приоритетная очередь записей, которые выглядят следующим образом:
{
cost: xxx,
outside_museum: xxx
}
Вы инициализируетеэто с записями, которые выглядят следующим образом:
{
cost: entry_fee_for_museum_x,
outside_museum: x
}
Сохраните музей сопоставления словаря с наименьшей стоимостью с именем что-то вроде cost_to_museum
.
И теперь ваш цикл выглядит так:
while queue not empty:
get lowest cost item from queue
if it's museum is not in cost_to_museum:
cost_to_museum[item.outside_museum] = item.cost
for each road connecting to museum:
add to queue an entry for traveling to here from there
(That is, location is the other museum, cost is road + current cost)
Это должно выполняться вовремя O((n+m) log(n+m))
, где n
- это количество музеев, а m
- это количество дорог.