IsVisited
здесь немного вводит в заблуждение, так как вы можете на самом деле посещать узлы, которые вы не можете получить от исходного узла.Я бы переименовал его в isProcessed
.Чтобы проверить, можете ли вы добраться от исходного узла к другому узлу, вам нужно проверить, является ли его расстояние int.maxVal
.
. Чтобы избежать переполнения, не выполняйте итерации соседей, когда currentVertex.ShortestDistanceFromTarget равен int.maxVal
, так какэто уже недоступный узел из исходного узла.