Проезд через город
От: adontz Грузия http://adontz.wordpress.com/
Дата: 25.04.03 16:45
Оценка:
Дан город, как набор точек-перекрёстков и соединяющих их улиц(для каждой улицы дана её длина). К любому перекрёстку подходит как минимум 3 улицы. В городе есть светофоры. Каждый светофор горит либо красным, либо зелёным. Красным он горит t1 секунд, зелёный горит t2 секунд. Каждый светофор в начальный момент времени имеет состояние [red|green] и количество времени колторое это состояние ещё будет продолжаться, это количество больше 0 и меньше t1|t2 для состояний red|green соответственно. В город на перекрёсток A въезжает грузовик, он должен выехать в перекёстка B. Наёти минимальный путь, учитывая, что на красный свет грузовик не едет.

Для 1000 перекрёстков и 10000 улиц время работы программы ~60сек
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Проезд через город
От: m.a.g. Мальта http://dottedmag.net/
Дата: 25.04.03 23:34
Оценка:
Здравствуйте, adontz, Вы писали:

A>Дан город, как набор точек-перекрёстков и соединяющих их улиц(для каждой улицы дана её длина). К любому


Если отношение t1/t2 рационально, то можно забабахать динамику. В перекрестке хранится, в какое минимальное время приехал грузовик в случае, когда свет горел уже i секунд.
Re: Проезд через город
От: Рома Мик Россия http://romamik.com
Дата: 26.04.03 08:37
Оценка:
Здравствуйте, adontz, Вы писали:

A>Дан город, как набор точек-перекрёстков и соединяющих их улиц(для каждой улицы дана её длина). К любому перекрёстку подходит как минимум 3 улицы. В городе есть светофоры. Каждый светофор горит либо красным, либо зелёным. Красным он горит t1 секунд, зелёный горит t2 секунд. Каждый светофор в начальный момент времени имеет состояние [red|green] и количество времени колторое это состояние ещё будет продолжаться, это количество больше 0 и меньше t1|t2 для состояний red|green соответственно. В город на перекрёсток A въезжает грузовик, он должен выехать в перекёстка B. Наёти минимальный путь, учитывая, что на красный свет грузовик не едет.


A>Для 1000 перекрёстков и 10000 улиц время работы программы ~60сек


Состояние всех светофоров в городе есть периодическая функцая с периодом t1+t2.
Вначале простой случай, когда t1+t2 целое и времена за которые грузовик проезжает любую улицу целые. Рассматриваем город как (t1+t2)*n точек. Где каждая точка это перекресток в определенный момент времени ( лежащий от 0 до t1+t2 ). Обычным волновым алгоритмом находим путь.

Более сложный случай, когда числа действительные, оказывается не более сложен. Просто узлы надо добавлять динамически. Очевидно, грузовик в любой точке может оказаться сколько угодно раз. Тогда запретим грузовику заезжать на перекрестки где он уже был более чем t1+t2 секунд назад. А возможно это слишком жестко. Тогда запретим ему заезжать туда где он был больше чем уже известное время проезда через город назад. Но это будет дооолго.
<< RSDN@Home 1.0 beta 6a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.