2009-11-02 4 views
0

У меня есть общий вопрос дизайна: Существует соединение, с четырьмя дорогими, соединяющимися с ним. Каждая дорога имеет 2 полосы. Что было бы лучшим способом разработать программу для обработки такого соединения. Это должно позволить 2 автомобилям 2 пройти через соединение, если они не мешают друг другу. и один автомобиль вошел перед другим, и оба они должны использовать ту же часть соединения, первый автомобиль должен получить приоритет. Кроме того, 2 машины могут прибыть на соединение в одно и то же время. Какой был бы лучший дизайн для этой проблемы? что именно вы должны заблокировать, чтобы наилучшим образом использовать соединение?Общая конструкция Вопрос

Спасибо!

+0

Это домашнее задание? (пожалуйста, пометьте его тегом [домашняя работа], если это так, спасибо) – mjv

+0

Я предлагаю сделать название более конкретным ... – Mathias

+0

Могу ли я отредактировать его после публикации? – user200797

ответ

0

Каждый автомобиль должен запереть части полосы, через которые он пройдет. Если одна из частей заблокирована, автомобиль должен ждать, пока она не будет отпущена.

+0

ОК - но как именно вы его реализуете? Какой объект вы заблокируете? Вам, вероятно, нужно разделить соединение на 4 части и заблокировать каждый раз часть соединения, которое вы собираетесь пройти. но можете ли вы предложить хорошую реализацию для этого? – user200797

+0

Вам следует попытаться сделать снимок, просто сделайте прямые линии. Затем вы увидите четыре квадрата, которые нужно будет заблокировать/разблокировать, так как машины поедут туда. – Jonas

+0

Я согласен, но при переходе к деталям это осложняется. позволяет сказать, что у меня есть 4 объекта - A, B, C, D. Предположим, у меня есть 4 машины, и отметьте им направление, из которого они идут: N (для севера), S, E, W. теперь, если автомобиль W хочет повернуть налево, он должен заблокировать (до входа в соединение) C, D, B. и освободите его, только когда он покинет соединение. Когда приходят другие автомобили, как они должны ждать? Очередь не очень хорошая, потому что доступность дороги не обязательно соответствует порядку прибытия. Может ли кто-нибудь предложить проблему, например, в C#? – user200797

0

Что вы думаете о наличии 4 разных очередей для каждой части соединения. каждый автомобиль, входящий в соответствующую очередь (должен входить в более чем одну очередь?), и только после того, как машина покидает всю очередь, он может пройти через соединение. Все еще не уверен, что это лучшая реализация для него.

0

Создайте буфер окружности с двумя записями для каждой дороги (один для входящего, один для исходящего), встречающийся на пересечении.

Для каждого автомобиля, который вы должны направить, введите его имя в буфер окружности для своего источника (входящего) и его адресата (исходящего). Затем итерации через кольцевой буфер, если вы получите два экземпляра одного и того же автомобиля вместе, то этот автомобиль может путешествовать. После этого выбирайте наугад из других автомобилей.

У меня такое ощущение, что это довольно неясно, поэтому рассмотрим пересечение с 4 дорогами, которые мы будем называть N, E, S и W. Для этого у нас будет 3 машины, A, идущий с востока, поворачивает на юг, B от Юг, путешествующий по северу и С, с востока на запад.

Circle буфер может быть построен как таковой (г = въездного, O = исходящим:

Ni No Ei Eo Si So Wi Wo 
B - C A A B - C 

Как мы перебираем слева направо, мы понимаем, что два являются смежными, так что они могут пойти, но Б и C не смежны, поэтому эти автомобили блокируют друг друга. Выберите один случайным образом для этого светового цикла, а другой - в следующем световом цикле. Таким образом, либо A, либо B могут идти, или A и C могут идти.

Примечание1: при проведении тестирования соседние игнорируют заготовки, поэтому в случае

Ni No Ei Eo Si So Wi Wo 
D E - - E D - - 

, который моделирует автомобиль, путешествующий по северу, а другой соседний Юг, как E, так и D, находятся рядом.

Примечание2: Я отобразил это для движения слева, потому что это то, что я делаю. Вам нужно будет отразить это, чтобы ехать справа.

Примечание3: Вы не можете перезаписать позицию в буфере, если две машины хотят, чтобы тот же пункт назначения автоматически блокировался, и вы должны просто оставить первый там и рассмотреть другой в следующий раз.

Смежные вопросы