用于访问状态机的伪代码

时间:2015-04-25 18:56:13

标签: algorithm graph pseudocode depth-first-search

我想编写用于使用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)

1 个答案:

答案 0 :(得分:1)

该算法独立于实现。实际上,这是相反的方式。您应该问的问题是:“您的专有实现是否具有算法所需的所有确切属性?

该算法几乎没有严格的要求。您需要一组节点和一组边,其中每条边连接2个节点。这是图的通用定义。如何获取,存储和处理这些集合与算法无关。对于算法步骤,您只需从集合中访问给定节点并访问其一组邻居。你提出的内容似乎很好(当然,下一步你需要在root之后进入下一个节点)。