このアルゴリズムは、グラフ内のノードをトラバースするのに最適です。
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);
}
}
}
これを使用して、グラフ内のターゲットノードを見つけることができます。ワークリストは、ワークリストが処理されるときにアイテムをデキュー(またはポップ)します。ターゲットを見つけたら、どうすればノードへのフルパスを返すことができますか?
更新 ルートへのパスを逆にする方法を理解しようとしています。このメソッドはルートノードで呼び出されます。その後、子には2つの親が存在する可能性があるため、各ノードで親プロパティを呼び出して元に戻すほど簡単ではありません。
このメソッドの目的は、パスを見つけることであり、すべてのノードを反復することではなく、ノードが存在するかどうかを確認することです。