【发布时间】:2009-03-02 23:23:11
【问题描述】:
我想使用队列对树进行广度优先搜索
var q = new Queue<T>();
q.Enqueue(Root);
foreach(T root in q)
{
foreach(T t in root.Children)
q.Enqueue(t);
}
但是我得到一个“枚举器被实例化后集合被修改”。例外。
是否有我可以使用的 C# 类型?
编辑:一点阅读让我觉得我可能做错了。
有没有办法使用 foreach 从队列中出列?
这可行,但很丑(OMHO)
var q = new Queue<T>();
q.Enqueue(Root);
while(q.Count > 0)
{
T root = q.Dequeue();
foreach(T t in root.Children)
q.Enqueue(t);
}
【问题讨论】:
-
您的工作示例有效地在做什么?除非我遗漏了什么,否则您只是不断地添加然后删除项目,最终以一个空队列结束。是否应该在“出队”命令之后进行处理?
标签: c# data-structures queue breadth-first-search