[извините, предыдущий ответ не был достаточно общим. сейчас исправлено]
вам нужен топологический вид вашего графа. см http://en.wikipedia.org/wiki/Topological_sorting, в котором говорится:
Каноническое применение топологической сортировки (топологический порядок)
в планировании последовательности заданий или задач
, который определяет как ваш начальный порядок сборки, так и способ перезапуска с любой промежуточной недействительной точки (просто найдите эту точку в отсортированном списке и начните с нее).
вы также можете отсортировать подграф, достижимый из недействительной точки, что в некоторых случаях даст вам меньше очков (вы избегаете восстановления точек в исходной сортировке, которые могли быть построены «параллельно» с недопустимым узлом и его дочерними элементами ) (чтобы найти подграф из точки, просто выполните оттуда поиск в ширину).
ps, поскольку порядок должен быть одинаковым, вы можете просто отфильтровать глобальный порядок для точек, которые находятся ниже вашей недействительной точки. Другими словами, вам не нужно на самом деле прибегать к помощи, просто начните с недействительной точки в вашем глобальном списке и пропустите узлы, которых нет в подграфе ниже вашей плохой точки.