我使用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作为参数。有人可以指导我如何开始?
先谢谢。
答案 0 :(得分:2)
color
是用于标记节点的地图 - 如果发现节点v
标有颜色RED(if color[v] = RED
),那么它表示该节点已被访问,并且已找到一个循环。