Самый легкий круг в ориентированном графе, проходящий через определенную вершину

Я направил график G(V,E) с весовой функцией w. так что вес каждого (u,v) является положительным значением. Мне нужно найти самый легкий круг в графе, в котором вершина k'является его частью.

Я также дал алгоритм, который я могу использовать, который может найти самый легкий путь для графа с положительными весами (я могу использовать его только один раз).

Я думал о создании подграфа G', где все вершины и ребра являются сильно связанными компонентами. найти график, который k'является его частью. затем найдите самый легкий смежный край от k'до некоторого v вершин. из этого vi можно запустить заданный алгоритм и найти легкий путь, а затем добавить вес отсутствующей вершины ( (k',v)).

это кажется правильным? Я в начале этого курса, и я чувствую, что я еще не там.

3 ответа

Решение

Я не могу представить, почему вы назвали свою исходную вершину k '. Тем не мение...

Добавьте новый vetrex w, который имеет те же исходящие ребра, что и k '.

Затем используйте алгоритм Дейкстры, чтобы найти кратчайший путь от w до k '.

Замените k ' на w в пути, и у вас будет самый маленький цикл, включая k'.

Это проблема кратчайшего пути из одного источника, где вы исключаете k->k Самостоятельная петля как решение, и найти более длинный путь от k до k. Хитрость всегда заключается в расширении потока по кратчайшему пути.

Учитывая это определение, вы можете начать поиск в Google...

Очень интересная проблема. Я предполагаю, что в графе нет отрицательных значений, или в противном случае для следующих решений требуется сначала нормализовать вершины так, чтобы отрицательные значения стали как минимум 0. Первый метод (тривиальный) состоит в обнаружении всех циклов, начиная с целевой вершины (k). Затем вычислите вес всех этих циклов и возьмите минимум. Второй способ - запустить алгоритм Дейкстры (снова следить за отрицательными весами) с целевого узла (k). Затем выполните итерацию по всем входящим ребрам (k) и выберите исходный узел с минимальным значением Дейкстры. Теперь самый легкий цикл включает в себя единственный путь (образованный обходом Дейкстры) от (k) до выбранного узла + мост, чтобы вернуться к (k). Надеюсь, это поможет:)

Другие вопросы по тегам