У меня есть два следующих класса:
class node
{
public:
node(){};
vector<edge*> my_edgeS;
vector<edge*> my_sub_edgeS;
};
class edge
{
edge(){};
node *start, *end;
bool inserted;
};
, где node
и edge
представляют узел и ребро исходного графа (G) соответственно, start
и end
являются начальным и конечным узлами ребра, соответственно, и my_edgeS
содержит ребра, инцидентные данному узлу в G.
Ребра и узлы G сохраняются в vector<edge*> edgeS
и vector<node*> nodeS
вкод.
Переменная inserted
используется для определения того, какие ребра включены в конкретный подграф (SG) графа.По определению, SG содержит все узлы G.
Чтобы получить и сохранить ребра, падающие на узлы в SG, я использовал следующие манипуляции:
for (int i = 0; i < (int)nodeS.size(); i++)
nodeS[i]->my_sub_edgeS.clear();
edge* e;
for (int i = 0; i < (int)edgeS.size(); i++)
{
e = edgeS[i];
if (e->inserted)
{
e->start->my_sub_edgeS.push_back(e);
e->end->my_sub_edgeS.push_back(e);
}
}
Много либолее эффективные возможности для создания и сохранения записей my_sub_edgeS
(например, с использованием других типов контейнеров STL вместо vector
)?Падающие ребра узлов применяются для выполнения алгоритмов поиска связующего дерева для SG.