2011-08-21 63 views
1

A有一组对象。每个对象都包含与其连接的其他对象的列表,但并非所有对象都连接到每个其他对象。我试图访问每个连接到特定起始对象的对象。要做到这一点,最明显的方法是这样的:访问每个连接的节点时不会访问多次

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

有没有更好的方式,不涉及存储每个访问对象的列表?

回答

2

鉴于你描述的数据结构(任何对象都可以连接到任何其他对象),我认为除了保留一个已经访问过的列表之外,你没有别的选择。如果您的对象处于分层树结构中,那么可以实现递归树行走算法来执行您想要的操作。

在您的对等连接对象结构中,任何试图取消已访问列表的算法都会冒着进入循环引用的无限循环的风险。我想你可以在对象本身中创建一个'visited'标志,在某些算法运行之前清除它们,但是这比列表方法更笨重(并且本质上不太适合线程)。