访问每个连接的节点而不访问多次

时间:2011-08-21 22:49:11

标签: data-structures

A有一组对象。每个对象都包含与其连接的其他对象的列表,但并非所有对象都连接到每个其他对象。我正在尝试访问连接到特定起始对象的每个对象。最明显的方法是:

  • 将连接起点的每个对象放入队列
  • 对于队列中的每个对象:
    • 对此对象执行任何操作
    • 将此对象添加到已访问对象列表
    • 检查在此访问列表中是否连接到此对象的每个对象,如果没有,则将其添加到队列

是否有更好的方法不涉及存储每个访问对象的列表?

1 个答案:

答案 0 :(得分:2)

鉴于您描述的数据结构(任何对象可以连接到任何其他对象),我认为您不能选择保留已访问过的列表。如果您的对象处于分层树结构中,则可以实现递归树步行算法来执行您想要的操作。

在对等连接对象的结构中,任何试图取消已访问列表的算法都会冒着进入循环引用的无限循环的风险。我想你可以在对象本身中创建一个'visited'标志,在一些算法运行之前清除所有这些标志,但这看起来比list方法更笨重(并且本身就更不易于线程化)。