Пусть G = (V, E) - неориентированный граф, s и t - две вершины в V. Каждое ребро графа окрашено в красный или синий цвет. Мне нужно найти алгоритм, который находит путь между s и t с минимальным количеством красных краев в нем.
Я подумал о следующем алгоритме: Модифицированный алгоритм BFS
Для каждой вершины мы будем использовать дополнительное поле, называемое «красный уровень», которое будет указывать минимальное количество красных ребер на пути от s до этой вершины. Как только мы обнаружим новую вершину, мы обновим ее красное поле уровня. Если мы пытаемся исследовать вершину, которая уже была обнаружена, если красный уровень этой вершины больше, чем текущий красный уровень, то мы удаляем эту вершину из дерева BFS и вставляем ее как дочернюю по отношению к вершине, дочерние элементы которой мы сейчас исследуем и так далее. Желаемый путь - это путь, соединяющий s и t в дереве BFS в конце выполнения алгоритма.
Сейчас я пытаюсь доказать, что этот алгоритм верен, но без особого успеха. Я также не уверен, что это действительно так. Есть подсказки / идеи?