廣度優先算法(BFS)與深度優先算法(DFS)


一、廣度優先算法BFS(Breadth First Search)

 

基本實現思想

        (1)頂點v入隊列。

        (2)當隊列非空時則繼續執行,否則算法結束。

        (3)出隊列取得隊頭頂點v;

        (4)查找頂點v的所以子節點,並依次進入隊列;

        (5)轉到步驟(2)。

 

 python偽代碼:

  def BFS(root)

    Q=[]

    Q.append(root[0])

    while len(Q)>0:

      node=Q.pop(0)

      print (node)

      #將所有子節點入隊列

      for i in node_child:

        Q.append(node_child[i])

 

:該算法很巧妙的利用了隊列的先進先出策略。

 

二、深度優先算法DFS(Depth First Search)

 

 

基本思想: 

遞歸實現:

             (1)訪問頂點v,打印節點;

             (2)遍歷v的子節點w,while(w存在),遞歸執行該節點;

代碼:

  /布爾型數組Visited[]初始化成false
  void DFS(Vetex v)
  {
      Visited[v] = true;
      for each w adjacent to v
          if (!Visited[w])
              DFS(w);
  }

 

非遞歸實現:

             (1)訪問頂點v,頂點v入棧S,打印輸出頂點,visited[v]=1

              (2)while(棧S非空)

                      x=棧S的頂元素(不出棧);

                      if(存在並找到未被訪問的x的子結點w)

                        訪問w,打印輸出,visited[w]=1;w進棧;

                      else

                        x出棧;

 注:visited[x]=1,標記該節點已被訪問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM