簡體   English   中英

在圖形中深度優先查找所有可能的路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM