Создание кругового буфера с двумя записями для каждой дороги (одна для входящей, одна для исходящей) встречи на перекрестке.
Для каждого автомобиля, который необходимо направить, поместите его имя в круговой буфер для его источника (входящий) и пункта назначения (исходящий). Затем переберите круговой буфер, если вы соберете два экземпляра одного и того же автомобиля вместе, то этот автомобиль может проехать. После этого выбирайте наугад из других машин.
У меня такое ощущение, что это довольно неясно, поэтому рассмотрим пересечение с 4 дорогами, которые мы назовем N, E, S и W. Для этого у нас будет 3 машины, A с востока, поворачивающего на юг, B с Юг путешествует на север, а С - с запада на восток.
Круговой буфер может быть построен как таковой (i = входящий, o = исходящий:
Ni No Ei Eo Si So Wi Wo
B - C A A B - C
Проходя слева направо, мы понимаем, что два А смежны, поэтому они могут идти, но В и С не смежны, поэтому эти машины блокируют друг друга. Выберите один наугад для этого светового цикла и отпустите другой в следующем световом цикле. Так что либо А и В могут идти, либо А и С. могут идти.
Примечание 1: проверка соседних игнорирует пробелы, поэтому в случае
Ni No Ei Eo Si So Wi Wo
D E - - E D - -
, который моделирует автомобиль, едущий на север, и другой, едущий на юг, и E, и D находятся рядом.
Примечание 2: Я наметил это для движения слева, потому что это то, что я делаю. Вы должны будете отразить это для вождения справа.
Примечание 3: Вы не можете перезаписать позицию в буфере, если две машины хотят, чтобы один и тот же пункт назначения автоматически блокировался, и вы должны просто оставить первый и рассмотреть другой в следующий раз.