Создайте буфер окружности с двумя записями для каждой дороги (один для входящего, один для исходящего), встречающийся на пересечении.
Для каждого автомобиля, который вы должны направить, введите его имя в буфер окружности для своего источника (входящего) и его адресата (исходящего). Затем итерации через кольцевой буфер, если вы получите два экземпляра одного и того же автомобиля вместе, то этот автомобиль может путешествовать. После этого выбирайте наугад из других автомобилей.
У меня такое ощущение, что это довольно неясно, поэтому рассмотрим пересечение с 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: Вы не можете перезаписать позицию в буфере, если две машины хотят, чтобы тот же пункт назначения автоматически блокировался, и вы должны просто оставить первый там и рассмотреть другой в следующий раз.
Это домашнее задание? (пожалуйста, пометьте его тегом [домашняя работа], если это так, спасибо) – mjv
Я предлагаю сделать название более конкретным ... – Mathias
Могу ли я отредактировать его после публикации? – user200797