alglib.sources.ru писал(а):1.Сортируем ребра графа по возрастанию весов.
2.Полагаем что каждая вершина относится к своей компоненте связности.
3.Проходим ребра в "отсортированном" порядке. Для каждого ребра выполняем: а)если вершины, соединяемые данным ребром лежат в разных компонентах связности, то объединяем эти компоненты в одну, а рассматриваемое ребро добавляем к минимальному остовному дереву б)если вершины, соединяемые данным ребром лежат в одной компоненте связности, то исключаем ребро из рассмотрения.
4.Если есть еще нерассмотренные ребра и не все компоненты связности объеденены в одну, то переходим к шагу 3, иначе выход.
Собственно вопросы возникают по пункту 3. Во первых каким образом определить создаётся ли цикл или нет?
В гугле я нашёл довольно тривиальное решение : обозначать вершины свойствами - неиспользовано,использовано в построении ребра (или хар-ка связности 0/1) . если хар-ка связанности точек x1,x2 равна 0,0 или 0,1 то ребро добавляется к дереву + x1=x2=1.. но в некоторых графах проявляется такая гадость что все точки получили 1, а дерево построить не получилось.
Второе решение: нафигачить поочерёдно n-1 ребёр где n кол-во вершин. но тогда смысл использования алгоритма для меня теряется.
Может у кого нибудь есть уже есть решённое?) Желаетльно без модулей и доп библ.