Ну, я не думаю, что вам нужно перезапускать всю сборку, если узел удален. Только для тех путей, в которых есть узел.
Тривиальным решением вашей проблемы будет добавление информации о избыточных путях, например, у вас может быть второй кратчайший путь для каждого из узлов на кратчайшем пути.
Это не уменьшает время вычислений, но кэширует его (это также увеличивает требования к хранилищу с коэффициентом n, где n - среднее число узлов для удаления одного узла, с коэффициентом n * (n-1) для 2 узлов избыточность ... и с коэффициентом n! для полной избыточности, а также увеличивает время первоначальной сборки на тот же коэффициент, а также увеличивает время, необходимое для добавления узлов)
Если есть способ улучшить это и сократить время перестроения, то вам нужно найти структуру, которая позволила бы быстро вычислить кратчайшее расстояние, но должна быть неизменной (или дешевой для пересчета), когда узлы удалены или добавлены на график.