Не по вариациям сборки, а по оптимизации.
При выборе кратчайшего маршрута, если дропать заведомо ненужные варианты на этапе сборки цепочек, объем вычислений может сократиться на неск. порядков и вписаться в возможности реального железа.
К примеру граф междугородней логистики или курьерской доставки.
Вариант ограничения по максимальной длине. Вычисляется заранее длина наикратчашего маршрута, в отдельную табличку. И если трасса по маршруту заткнулась, авария, дорожные работы, нашествие лягушек, обрабатываются цепочки маршрутов , с предельным превышением = эталонное_ расстояние * 1.7
Примерный коэффициент, полученный несколькими пробами.
В этом случае петли маршрутов, идущие в противоположную сторону, или по спирали будут отсекаться на ранних стадиях.
Можно фильтровать "полосой пропускания" , например ограничив построение альтернативных маршрутов отклонением на 1 - 2 района в сторону от наикратчайшего маршрута.
Кстати при озвученных исходных условиях можно решать не графовыми алгоритмами, а отранжировав с десяток альтернативных маршрутов из точки А в точку В, и выбраковывая из них те, на которые поступила информация о непригодности для движения. Сложнее, когда данные о весе ребер поступают динамически, из расчета дорожной обстановки. Здесь обработка графа необходима.
Похожая ситуация возникает при селф-джоине, когда таблица джоинится сама на себя с целью анализа сочетаний и сходства. Добавив фильтры и подропав таким образом ненужные варианты, я сократил объем двух промежуточных таблиц по 1.2 Тб весом до одной в 56 Гб.
Это такой же случай, когда сначала производится вычисление всех возможных вариантов, а потом выбираются оптимальные из них.