如何遍历链接列表,该链接列表不仅包括循环,还包括来自单个节点的多个链接? (VB6)

时间:2012-03-06 08:27:34

标签: graph vb6 traversal

我有一个由NODE_制作的链接列表。这些节点实际上并不指向其他节点,而是指向NODELINK_的链接列表,它们存储连接的节点。

这允许形成不规则图形,例如:

N------N---------N-------N
      / \        |        \
     /   \       N---N-----N
    /     \      |    \    |  
   N-------N-----N     N---N            

你明白了。非常动态的数据。典型节点可能如下所示:

NOODE_1 -> NODELINK_1 -> NODELINK_2 -> NODELINK_3 -> NULL
               |             |             |
               V             V             V
             NODE2_        NODE3_        NODE4_

在遍历这样的图表时会出现问题。绕过图表是很容易的,但是我怎么能确保我没有发现自己在图形中穿过一个循环(注意:假设头部将成为这个循环的一部分是不安全的,所以你的典型的“循环链表遍历”算法不会在此处删除它,如何确定何时处理节点?

我唯一能想到的就是在每个节点中设置一个标志,表明它已经被处理过了。这看起来有点像hackjob,但我想不出任何其他方式来做我认为合理的方法。我错了吗?还有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

我能想到的另一种方法是保留一个数据结构,例如Dictionary来列出您已经访问过的节点,并在访问您已经访问的节点之前测试成员资格参观。这样可以避免在节点中创建额外的字段。

答案 1 :(得分:3)

你正在做Graph traversal。 为每个节点设置visited标志绝对是一种常见的方法,例如维基百科上的Breadth-first searchDepth-first search算法mark访问过的节点。