Александр Мирошниченко
Александр Мирошниченко | Репутация: 0 (Без голоса) 4 июля 2014 в 15:30
Решение транспортной задачи

День добрый.

Нужно решить такую вот задачу, условие которой на английском:

You are given a list of cities. Each direct connection between two cities has its transportation cost (an integer bigger than 0). The goal is to find the paths of minimum cost between pairs of cities. Assume that the cost of each path (which is the sum of costs of all direct connections belongning to this path) is at most 200000. The name of a city is a string containing characters a,...,z and is at most 10 characters long.2)

 

Input

s [the number of tests <= 10]

n [the number of cities <= 10000]

NAME [city name]

p [the number of neighbours of city NAME]

nr cost [nr - index of a city connected to NAME (the index of the first city is 1)]

           [cost - the transportation cost]

r [the number of paths to find <= 100]

NAME1 NAME2 [NAME1 - source, NAME2 - destination]

[empty line separating the tests]

 

Output

 

cost [the minimum transportation cost from city NAME1 to city NAME2 (one per line)]

 

Example

 

Input:

1

4

gdansk

2

2 1

3 3

bydgoszcz

3

1 1

3 1

4 4

torun

3

1 3

2 1

4 1

warszawa

2

2 4

3 1

2

gdansk warszawa

bydgoszcz warszawa

 

Output:

3

2

 

Помогите, пожалуйста, понять смысл задачи для того, чтобы я смог решить ее на PHP.

Спасибо.

Михаил Малинкин
Михаил Малинкин | Репутация: 1036 (Эксперт) 4 июля 2014 в 21:02

Добрый день. Так у Вас же цель задачи чётко указана:"Найти маршруты между парами городов с минимальной стоимостью перевозки". Если вкратце, то Вам даётся список городов с прямыми маршрутами (путями) между ними. У каждого маршрута есть своя стоимость перевозки (целое число больше 0). Предполагается, что общая стоимость маршрута (которая является суммой из всех прямых путей, лежащих на данном маршруте) не превышает 200 000. Название городов является строковым значением, содержащим символы от a до z до 10 символов в длину. Для себя определитесь, что маршрут - это расстояние от пункта отправки до пункта назначения, а пути (отрезки) - это расстояния между городами, лежащими на данном маршруте. Вы должны понимать, что в одну и ту же точку назначения можно попасть разными путями, через разные промежуточные точки (города), т.е. разными маршрутами и стоимость перевозки на данных маршрутах будет разной. Вот от Вас и требуются найти маршрут с минимальной стоимостью перевозки. У Вас в примере Польша используется, вот, для наглядности, откройте атлас автомобильных дорог и проложите разные маршруты до Варшавы, скажем, из Киева или Минска. Помните, что стоимость каждого из выбранных Вами маршрутов не должна превышать 200 000 чего-то там. Вот как-то так.

Михаил Малинкин
Михаил Малинкин | Репутация: 1036 (Эксперт) 6 июля 2014 в 13:54

Решение данной задачи есть на С#, возможно, будет полезным, https://github.com/KaranTalreja/SPOJ/tree/master/SHPATH ; http://blog.csdn.net/kenden23/article/details/31750373 , ещё есть пособие, в котором рассматриваются подобные задачи https://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=10&cad=rja&...