Этот алгоритм отлично справляется с обходом узлов в графе.
Dictionary<Node, bool> visited = new Dictionary<Node, bool>();
Queue<Node> worklist = new Queue<Node>();
visited.Add(this, false);
worklist.Enqueue(this);
while (worklist.Count != 0)
{
Node node = worklist.Dequeue();
foreach (Node neighbor in node.Neighbors)
{
if (!visited.ContainsKey(neighbor))
{
visited.Add(neighbor, false);
worklist.Enqueue(neighbor);
}
}
}
Я могу использовать это, чтобы найти целевой узел на графике. Рабочий список выводит из очереди (или выталкивает) элементы по мере обработки рабочего списка. Как только я найду цель, как я могу вернуть полный путь к узлу?
Обновление. Пытаюсь понять, как изменить путь к корню. Метод вызывается на корневом узле, после чего дочерние элементы могут иметь двух родителей, поэтому это не так просто, как вызвать свойство parent на каждом узле и вернуться назад.
Цель метода - найти путь, а не перебирать все узлы или проверить, существует ли узел.