我需要找到一個或多個複雜圖形結構的路徑。通過有向圖找到路徑的遞歸lambda表達式?
class Node
{
public string Value { get; set;}
public List<Node> Nodes { get; set;}
public Node()
{
Nodes = new List<Node>();
}
}
是什麼讓這個複雜的是,節點可以引用到早期的節點:該圖是使用類似於此建成。例如,
A - >ç - >電子 - >一個
我需要做的就是讓代表通過節點的路徑棧的列表,直到我得到了一個節點具體的價值。由於可能有一些非常大的路徑可用,我們可以有最大節點來嘗試。
List<Stack<Node>> paths = FindPaths(string ValueToFind, int MaxNumberNodes);
有沒有人有辦法建立這個(或類似的東西)?我在過去做過遞歸,但是由於某種原因,我總是在考慮這個問題。我的問題指定了一個lambda表達式,但使用lambda不一定是必需的。我會很感激任何解決方案。
附註:我從aku的this recursion question的優秀答案中解除了課程。雖然他下面顯示的優雅解決方案遍歷樹結構,但它似乎沒有足夠的靈活性來執行我所需的操作(例如,消除循環路徑和跟蹤成功的路徑)。
Action<Node> traverse = null;
traverse = (n) => { Console.WriteLine(n.Value); n.Nodes.ForEach(traverse);};
traverse(root); // where root is the tree structure
編輯:
基於從意見和答案下面我在CodeProject上發現了一個優秀的解決方案在整個輸入。它使用A *路徑查找算法。 Here is the link.
如果你有循環引用,它不再是一棵樹。我認爲「定向圖」是正確的術語。 – 2008-12-28 19:07:07
謝謝。我知道我沒有使用正確的術語,但我不知道什麼是正確的,所以我只是試着盡我所能地解釋它。我現在就搜索正確的術語。 – 2008-12-28 20:10:11