質問

いるのに必要パスあるいは経路を下り複雑なグラフ構造です。グラフは内蔵のようなものを使ったこ

class Node
{
    public string Value { get; set;}
    public List<Node> Nodes { get; set;}

    public Node()
    {
        Nodes = new List<Node>();
    }
}

この複雑なのノードで参考に戻る前のノードです。例えば、

A->C>E→

今必要なのは、一覧を取得しスタックを代表する経路を通じてのノードまでを取得しますノードが特定の値です。そ可能なのですが非常に大きな経路を利用して最大限のノードについてです。

List<Stack<Node>> paths = FindPaths(string ValueToFind, int MaxNumberNodes);

いて構築することが可能となる本(う)?もちろん、再帰過去にがん総合脳おならを考えることも理由です。私の質問に指定されているラムダの発現が使われているラムダが必ずしも必要としません。いることに感謝せます。

注:私のクラスからのアク優れた回答のため この再帰問題.がエレガントな解決方法を以下に示を横断のツリー構造ではなさそうな柔軟ない(例えば、解任しているパスの円形軌道パスすること).

Action<Node> traverse = null;
traverse = (n) => { Console.WriteLine(n.Value); n.Nodes.ForEach(traverse);};
traverse(root);  // where root is the tree structure

編集:

に基づく入力からのコメントや答えを下回ったソリューションにCodeProject.使用する*経路探索アルゴリズムです。 ここにあります。

役に立ちましたか?

解決

あなたしている問題は、経路探索に関連している場合、あなたは「スター」や「*」のためのgoogleすることをお勧めします。 その共通かつ効率的な経路探索アルゴリズム。直接あなたの問題に関連たとえばこの記事を参照してください。

また、 Dijsktraアルゴリズムの

他のヒント

るか、というと分からないと思いる出力 すべての パスの目標 ベスト へのパスをゴー(一部の指標などパスの長さ)、 他の 経路を決めることが出来ませんでした。

を想定した後、私は再帰的な戦略を含む追跡を訪れたノードが示したようにBrann、これらの変化:

  1. 追加パラメータの目標に求められているコレクションの成功、現在のパスからをしていきたいと思っています。

  2. 入力と一致するノードの目標を追加し電流経路上における現在のノードのリストに成功した。

  3. 拡張現在のパスは、現在のノードのパスに渡されず再帰的に発信します。

  4. 最初の呼び出し ExploreGraph コ空路、空のリストが成功す。

完了時に、アルゴリズムにおいては横断のグラフは、明確な進路の目標をもって捉えられています。

ことになるだけで、迅速でスケッチが、対応することができるでしょう肉でお客様の特定のニーズに対応.

私はあなたが達成したいのかを正確に知りませんが、この循環参照の問題は通常、すでに訪問したノードをタグ付けすることによって解決されます。 ちょうどあなたがループしないように、既に訪問されたノードを追跡するためにDictionnaryを使用します。

例:

  public void ExploreGraph(TreeNode tn, Dictionary<TreeNode, bool> visitednodes)
        {

            foreach (Treenode childnode in tn.Nodes)
            {
                if (!visitedNodes.ContainsKey(childnode))
                {
                    visitednodes.Add(childnode);
                    ExploreGraph(childnode, visitednodes);
                }
            }
        }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top