2013-10-20 94 views
0

我期待進入深度優先搜索,我發現正在尋找一個特定的答案的例子中,可以說,數字10是否可以使用深度優先搜索來搜索每個節點?

它穿過樹丟棄每一個不爲10,並在找到停止節點10.

是否可以使用深度優先搜索或其他算法搜索樹的每個分支?我希望它運行一個場景並提供一個值並將其存儲到一個可能名爲highestValue的變量中。

然後它會搜索下一個分支並獲取一個值並將其存儲到一個可能名爲Value的變量中。然後它會將最高值與Value進行比較,並將其與if (Value > highestValue)highestValue = Value進行比較。

它會重複這個過程,直到它完成每一個可能的場景。有任何想法嗎?我應該提到我正在用Java寫這個。

+6

只是...不要告訴它停止時,它到達你的目標?我沒有看到問題在這裏。你能提供你想要的代碼和特定的輸入/輸出嗎? – Eric

+0

@Eric我仍在研究如何運作,但大多數情況下,我只是想知道是否可以告訴它不要停止,因爲我發現每個例子都有一個特定的目標。你剛剛回答我的問題,謝謝! –

回答

0

如果我們想訪問圖中的每個節點,DFS是最簡單的。但是,如果我們有一棵非常大的樹並且想要在離原始節點太遠時做好準備,DFS就可以搜索數千個節點的祖先,但是不會搜索所有節點的子節點。嚴格地說,它取決於圖表中的數據是如何組織的。 Source

0

既然你還在想它是如何工作的,那麼這段代碼可能會幫你弄清楚。這適用於圖表,看一看。它對每個節點進行DFS,但在到達我們想要查找的節點時停止。

要獲得最高值,只需將最大值存儲到一個int變量中,並繼續搜索並將每個節點的數據與int變量中的當前最大值進行比較。

public static boolean search(Graph g, Node start, Node end) { 
    LinkedList<Node> stack = new LinkedList<Node>(); 
    for (Node u : g.getNodes()) { 
     u.state = State.Unvisited; 
    } 
    start.state = State.Visiting; 
    stack.add(start); 
    Node u; 
    while (!stack.isEmpty()) { 
     u = stack.removeFirst(); 
     if (u != null) { 
      for (Node v : u.getAdjacent()) { 
       if (v.state == State.Unvisited) { 
        if (v == end) { 
         return true; 
        } 
        else { 
         v.state = State.Visiting; 
         stack.add(v); 
        } 
       } 
      } 
      u.state = State.Visited; 
     } 
    } 
    return false; 
}