Нека G=(V,E) е неориентиран граф, s и t са два върха във V. Всеки ръб на графиката е оцветен или в червено, или в синьо. Трябва да намеря алгоритъм, който намира път между s и t, който има минимален брой червени ръбове в него.
Мислех за следния алгоритъм: Модифициран BFS алгоритъм
За всеки връх ще използваме допълнително поле, наречено "червено ниво", което ще показва минималния брой червени ръбове по пътя от s до този връх. След като открием нов връх, ще актуализираме полето му с червено ниво. Ако се опитваме да изследваме връх, който вече е открит, ако червеното ниво на този връх е по-голямо от текущото червено ниво, тогава изтриваме този връх от BFS дървото и го вмъкваме като дете на връх, чиито деца ние сега проучват и т.н. Желаният път е този, който свързва s и t в дървото на BFS в края на изпълнението на алгоритъма.
Сега се опитвам да докажа, че този алгоритъм е правилен, но с малък успех. Също така не съм сигурен дали всъщност е правилно. Някакви съвети/идеи?