RusMikle
@RusMikle
Программист

Как реализовать алгоритм Прима на графе?

Нужна реализация алгоритма Прима на графе, представленном списком смежности с помощью C++ с STL-овской priority_queue очередью. Собственно, суть вопроса именно в том, как реализовать, просто кусок кода или пошаговый алгоритм без вырвиглазного псевдокода и мат. абстракций. Или другими словами есть граф, реализованный в виде списка смежных вершин. Вопрос: как с помощью очереди с приоритетом из STL (C++) реализовать Алгоритм Прима для поиска минимального остовного дерева (MST)?
Спасибо

  • Вопрос задан
  • 6967 просмотров
Пригласить эксперта
Ответы на вопрос 3
@vans239

По сути:

set {int} used; 
vector {list {Edge}} edges; 
vector {Edge} ans;
pr_queue {Edge} next_edges;
used.add(0);
edges.addAll(edges[0]);
while(!next_edges.empty()){
  Edge edge = next_edges.front();
  next_edges.pop();
  if(!used.contains(edges.to)){
    used.add(edges.to);
    ans.add(edge);
    next_edges.addAll(edges[edges.to]);
  }
}

Для pr_queue добавить компаратор по весу ребра.
Данный алгоритм делает много лишних действий, зато простой

Ответ написан
Комментировать
@Nerazumovskiy

Гляньте еще сюда http://e-maxx.ru/algo/mst_prim. Там приведены очень полезный оптимизации алгоритма, они существенно ускорят тривиальное решение.

Ответ написан
Комментировать
RusMikle
@RusMikle Автор вопроса
Программист

vans239: 1
Nerazumovskiy:
Спасибо.

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы