Скажите, что вы пытаетесь минимизировать общее пройденное расстояние.Ясно, что проблема коммивояжера - это частный случай вашей проблемы, поэтому ваша проблема NP-трудна.Это ставит нас в область алгоритмов эвристики / аппроксимации.
Задача также нуждается в дополнительных уточнениях, например, сколько учеников может поместиться в данном автомобиле.Допустим, столько, сколько вы хотите.
Как насчет того, чтобы решить это как минимальное связующее дерево с корнем в конечном пункте назначения.Тогда каждый ученик с машиной отвечает за сбор всех своих дочерних узлов.Таким образом, общее расстояние, пройденное не более, чем в 2 раза превышает общую длину связующего дерева, что в 2 раза превышает предел.Конечно, это смешно, потому что в этом случае узлы рядом с root будут ездить на мега автобусе, а не на машине.
Итак, вы начинаете играть в упаковочную игру, где вы пытаетесь жадно заправлять машины
Я знаю, что это не решение, но это может помочь вам лучше определить проблему.