Я не совсем понимаю ваш алгоритм, в частности, на этапе 4 вы раскрасите каждую вершину двумя краями разного цвета в два цвета - синий и красный ... Поэтому я не буду пытаться улучшать ваш алгоритм, но представлю один из моих - вариант BFS со временем O (E + V).
Идея: итерация по краям графа и измерение глубины как количество раз, которое вы меняли цвета.
Примечание: мы запустим алгоритм дважды, сначала предположим, что первый край пути красный, второй предположим, что первый край пути синий, затем возьмем минимум.
- Запускайте BFS только на красных краях, начиная с s (который является первым элементом в очереди BFS), если вы просматривали вершину на синем краю, сохраните ее в другой очереди.
- Отметьте все узлы, которые вы видели, номером
i
(в начале i=0
). - Возьмите очередь для синих краев и сделайте ее своей основной.
- Выполните этапы с 1 по 3, но поменяйте цвета и добавьте 1 к
i
.
В конце число в t
- это минимальное количество замен, выполненных для достижения t
.