Есть возможность удвоить количество вершин не в X .
Для каждой вершины v не в X , вы создаете v0 и v1 : v0 доступен только без перехода из вершины в X , v1 доступен через одну и только одну вершину в X .
Назовем w другую вершину. Тогда:
if w is in X, v not in X:
length (w, v0) = infinite and dist(v1) = min (dist(v1), dist(w) + length(w, v))
if w is in X, v in X:
length (w, v) = infinite
if w is not in X, v not in X:
dist (v0) = min (dist(v0), dist (w0) + length (w, v))
dist (v1) = min (dist(v1), dist (w1) + length (w, v))
if w is not in X, v is in X:
dist (v) = min (dist(v), dist (w0) + length (w, v))