Проблема кажется слишком сложной, чтобы применить какое-то хорошее решение за полиномиальное время. Например, вы можете решить эту проблему с помощью некоторого алгоритма максимального потока, если вам не важно, где находятся учащиеся, не заботятся о фрагментации времени и т. Д. Однако это, вероятно, не приведет к тому, что график вас больше всего порадует. Если вы хотите смоделировать реальную ситуацию в мире, предполагая, что у вас небольшое количество студентов (например, <10) и у вас есть небольшое количество часов (например, <40), вам просто нужно сделать <a href="http://en.wikipedia.org/wiki/Backtracking" rel="nofollow noreferrer"> возврат , ( то есть, грубой силой), чтобы попробовать различные назначения и оптимизировать любые ограничения, которые у вас есть. Поскольку время выполнения является экспоненциальным, возможно, в конечном итоге вам придется выполнить некоторые ветвления и привязки оптимизаций.
Независимо от того, какой подход вы выберете, вам придется упростить или конкретизировать проблему более конкретно. Например, если вы решите, что занятия всегда начинаются в 2, 4, 6 или 8 часов, решение проблемы будет намного проще. Вам также необходимо определить формулу, которая дает качество решения (например, общее время обучения минус общее время в пути). Моделирование подобных проблем и написание решений обычно доставляет удовольствие, особенно если вы программист или энтузиаст алгоритмического процесса.