我有一个节点(基本上是图顶点)模板类,如下所示:
template<class T>
class Node
{
public:
T Data;
Node<T>* Parent;
vector<Node<T>*> Children;
};
然后我有一个封装图根的模板化图类,并且我有一个应该生成欧拉路径的方法(在它检查是否满足欧拉路径存在的条件之后):
template<class T>
class Graph
{
public:
Node<T>* Root;
vector<Node<T>*> GetEulerianPath() const;
bool HasEulerianPath() const;
};
HasEulerianPath()只是遍历节点(* vertex *) 层次结构并计算具有奇数度的顶点的数量。如果它们不超过两个,则返回 true。
现在的问题是 - 我不太确定如何实现算法。任何提示?我应该只提取向量中的整个层次结构并迭代它还是使用节点的一些递归方法?维基百科页面建议使用一个链表......或者我应该只生成一个新的较小的单向图作为GetEulerianPath()方法的输出?我对如何在此处进行感到困惑。