ALEXKIRNAS's blog

By ALEXKIRNAS, 10 years ago, In Russian

Всем доброго времени суток! Недавно изучил алгоритм Дейкстры и его реализацию с помощью контейнера set. Но для того чтобы он (алгоритм) работал верно нужно было держать в контейнере данные типу pair что уменьшало скорость работы, поэтому я решил написать к контейнеру компаратор:

struct cmp { bool operator()(int a, int b) const { return d[a] < d[b];} };

здесь массив d[] хранит кратчайшее расстояние к вершине i;

Когда я попробовал добавить в контейнер число b, такое что d[a]==d[b] и a!=b, то ничего не произошло (то есть нужное число не добавилось в контейнер а релаксация вершины прошла) и как последствие неверная работа алгоритма :(

Возможно ли как-то это исправить (обойти проблему), или придется пользоваться контейнером с pair? Можно ли это реализовать с помощью других встроенных структур данных?

P.S.: За ранние всем спасибо :)

UPD: Проблема решена, но вопрос реализации с помощью других структур остается открыт.

  • Vote: I like it
  • -1
  • Vote: I do not like it