完全迭代深化深度优先搜索

时间:2011-08-09 08:50:12

标签: c# depth-first-search iterative-deepening

当我有一个看起来有点像这样的物体时。

C#
public class Step {
  int id;
  List<Step> nextSteps;
}

我正在尝试将其转换为另一个看起来非常相似的对象,除了它不允许循环这一事实。

它应该通过不扩展已经出现在更高深度的节点的子节点来处理循环。迭代深化解决了这个问题(深度优先搜索实现但是广度优先搜索顺序),但我正在努力使用以下结构的实现。

我发现的所有实现都依赖于找到某种目标节点,而我需要扩展整个树。

任何帮助将不胜感激。 :d

1 个答案:

答案 0 :(得分:1)

添加Dictionary<Step, int>,每次展开节点时,请添加其深度。

void ExpandStep(Step s, int d)
{
    int prevDepth;
    if (lookup.TryGetValue(s, out prevDepth) && prevDepth <= d)
      return;
    lookup.Add(s, d);
    ... 
}