-
Notifications
You must be signed in to change notification settings - Fork 3
Алгоритм генерации расписания
- Считаем, что каждое соревнование не длится больше дня.
- Все дни имеют одинаковую длительность, например, 8 часов.
- Длительность соревнования определяется также в часах.
Представим сам объект расписания так:
Т.е. массив списков, состоящих из объектов-соревнований. Длина массива списков = количество спортивных объектов. При попытке добавления очередного Event'а мы смотрим, в какой список он попадает, и пробуем запихать его следом за последним элементом этого списка в соответствующий день. Если никак, то пробуем пихать другой Event. Если ни один Event не лезет из-за каких-то причин (вылезают за пределы дня, не могут стоять одновременно с другими соревнованиями), мы пихаем в расписание пустые Event'ы длительностью 1 час на все спорт.объекты и опять пробуем сгенерить расписание.
Plan - непосредственно расписание, большая структура для хранения генерящегося расписания Events - массив соревнований. hoursleftp[] - массив. Сколько осталось часов в текущем дне расписания (для каждого спорт.объекта) currday[] - массив. Текущий соревновательный день в расписании для каждого спорт.объекта (см. картинку выше) TryPushPlan - ф-ция с проверками на ограничения. з.ы. Остальные функции могут обозначаться странными значками <. > :)
Этот долбаный GitHub не хочет постить мой псевдокод красиво, поэтому получайте так: