このアルゴリズムは、グラフ内のノードをトラバースする優れた処理を行います。C#グラフのトラバース
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つの親を持つことがあるので、各ノードで親プロパティを呼び出してバックアップを実行するだけでは簡単ではありません。
この方法の目的は、すべてのノードを反復しないように、またはノードが存在するかどうかを確認するために、パスを見つけることです。
あなたにはπ.Add(隣人、訪問先)があります。 πディクショナリの値はノードですが、あなたはその値をどのようにトラッキングしていますか? – blu
前身。ここでの辞書は、実際には関数として動作しています。入力値nに対して、先行ノードを与えます。入力はキー、戻り値は値です。 –
それはπ.Add(neighbor、node);ではありませんか?コンセプトはいいと思うが、コードは有効ではない。私はそのタイプミスだと思う。 – blu