我想编写用于使用DFS访问状态机的伪代码。状态机可以被视为有向图。以下来自Cormen的算法书使用DFS算法来访问图表。
DFS-VISIT(G, u) //G= graph, u=root vertex
u.color = GRAY
for each v from G.Adjacents(u) //edge (u, v)
if v.color == WHITE
DFS-VISIT(G, v)
然而,状态机可以在两个顶点之间具有多个边。以上算法将边缘存储在邻接列表中。我已经用Java实现了以下类的算法,
class Node{
String name;
....
ArrayList<Transition> transitions;
void addTransition(Transition tr);
}
class Transition
{
String src;
String dest;
}
通过上面给出的信息,我构建了一个带有节点和转换对象的状态机。我想修改上面的算法,其中我没有图形对象G.我只能访问根对象。
我可以修改上面的算法吗?
DFS-VISIT(root) //root node
root.color = GRAY
for each t from root.getTransitions() //t=transition
v = t.getDestination() //v=destination of t
if v.color == WHITE
DFS-VISIT(v)
答案 0 :(得分:1)
该算法独立于实现。实际上,这是相反的方式。您应该问的问题是:“您的专有实现是否具有算法所需的所有确切属性?”
该算法几乎没有严格的要求。您需要一组节点和一组边,其中每条边连接2个节点。这是图的通用定义。如何获取,存储和处理这些集合与算法无关。对于算法步骤,您只需从集合中访问给定节点并访问其一组邻居。你提出的内容似乎很好(当然,下一步你需要在root之后进入下一个节点)。