private static void Visit(IVertex node, ColorsSet colors,
TimestampSet discovery, TimestampSet finish, LinkedList<IVertex> list, ref int time)
{
colors.Set(node, VertexColor.Gray);
discovery.Register(node, time++);
foreach(IVertex child in node.Adjacencies)
{
if (colors.ColorOf(child) == VertexColor.White)
{
Visit(child, colors, discovery, finish, list, ref time);
}
}
finish.Register(node, time++);
#if DEBUG
Debug.Assert(discovery.TimeOf(node) < finish.TimeOf(node));
#endif
list.AddFirst(node);
colors.Set(node, VertexColor.Black);
}