如何检测作为链表实现的图形中的循环?

时间:2012-03-25 17:00:10

标签: java graph linked-list

我使用java.util.LinkedList将图形实现为双向链表。基本上,链表上的每个节点都是图的顶点,并且每个顶点都连接到其他链表以表示边。我被要求使用以下算法来检测图中的循环。

DFS-Cycle (u)
Precondition: u is a vertex in a graph G
Postcondition: a cycle reachable from u is returned, of one exists
    color[u] <- RED
    push u onto stack
    for each v in Adj[u] //explore edge (u,v)
        if color[v] = RED//back edge
            return list of elements on stack
        else if color[v] = BLACK
            DFS-Cycle(v)
    colour[u] <- GRAY
    pop u from stack

我不明白您必须将链表图表连接到名为“color”的数组并在遍历列表时指定颜色。我不允许更改链表的节点结构(基本上是整个图)。我只允许实现循环方法来检测图中的循环并返回一个布尔值。该方法将Node作为参数。有人可以指导我如何开始?

先谢谢。

1 个答案:

答案 0 :(得分:2)

color是用于标记节点的地图 - 如果发现节点v标有颜色RED(if color[v] = RED),那么它表示该节点已被访问,并且已找到一个循环。