![](/img/trans.png)
[英]Finding all possible routes in a Graph Data Structure using Depth First Search in C++
[英]Find all possible paths in depth first search in graph
我試圖從圖中的一個節點找到所有可能的路徑,這些路徑將訪問圖中的所有其他節點。 我希望該函數在我的n * m圖中生成路徑的所有可能性。 我圖中的每個節點都有一個所有鄰居節點的向量和一個布爾值,用於檢查是否訪問了該節點。
例:
a b
c d
將產生:
abcd
abdc
acbd
...
我嘗試了此答案中的解決方案,但只返回了一條路徑。 如何產生所有可能的路徑?
在某些情況下,由於您的描述,您可能擁有無限的路徑和無限長的路徑,因為您沒有指定無法重新訪問節點。
您應該實現深度優先搜索,並在遞歸DFS方法中將引用傳遞給標記的(訪問過的)節點數組,前提是您已對圖形中的節點數進行了計數。 在訪問每個節點之后,請確保在離開該節點之前再次將其設置為false,以便可以通過另一個節點重新訪問它。
該算法的實現實際上將取決於您如何實現圖形結構,而沒有細節,我所能做的就是推測您擁有一個鏈接結構,並帶有一個代表不同節點的鄰接表。 我也不知道不同的節點如何映射到字符,因此我不得不推測另一個細節,但是要說節點是用整數表示的。
您需要將以下內容傳遞到DFS方法中:標記節點的數組,包含路徑信息的鏈接列表,起始節點(即當前節點)和最終節點
void printAllPaths(LinkedList<Integer> currentPath, boolean[] marked, int current, int last){
for( all nodes adjacent to current, node ){
if(node == last){
currentPath.addLast(last);
System.out.println(currentPath);
currentPath.removeLast();
}else if(!marked[node]){
currentPath.addLast(node);
marked[node] = true;
printAllPaths(currentPath, marked, node, final);
marked[node] = false;
currentPath.removeLast();
}
}
}
這將是代碼的基本思想。 如果無法事先編譯,我深表歉意,但這應該可以打印出所有路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.