75_圖的遍歷(DFS)

關鍵詞:深度優(yōu)先(DFS)

0. 深度優(yōu)先(DFS)

  • 原料:class LinkStack<T>
  • 步驟:
    1. 將起始頂點壓入棧中
    2. 彈出棧頂頂點v,判斷是否已經(jīng)標記(標記:轉2,未標記:轉3)
    3. 標記頂點v,并將頂點v的鄰接頂點壓入棧中
    4. 判斷棧是否為空(非空:轉2,空:結束)



      DFS算法示例

      DFS流程圖
    SharedPointer< Array<int> > DFS(int i)
    {
        DynamicArray<int>* ret = NULL;

        if( (i <= 0) && (i < vCount()) )
        {
            LinkStack<int> s;
            LinkQueue<int> r;
            DynamicArray<bool> visted(vCount());

            // 初始化設置,標記數(shù)組中的每一個都沒有被訪問
            for(int j=0; j<visted.length(); ++j)
            {
                visted[j] = false;
            }

            s.push(i);

            while( s.size() > 0 )
            {
                int v = s.top();      // 拿出隊列頭部的頂點

                s.pop();

                if( !visted[v] )        // 判斷是否被訪問
                {
                    SharedPointer< Array<int> > aj = getAdjacent(v);

                    for(int j=aj->length()-1; j>=0; --j)
                    {
                        s.push((*aj)[j]);
                    }

                    r.add(v);
                    visted[v] = true;
                }
            }

            ret = toArray(r);
        }
        else
        {
            THROW_EXCEPTION(InvalidParameterExcetion, "Index i is invalid ... ");
        }

        return ret;
    }

1. 小結

  • 深度優(yōu)先按照先序遍歷的方式對頂點進行訪問
  • 深度優(yōu)先算法的核心是的使用
  • 深度優(yōu)先和廣度優(yōu)先的唯一不同在于?;蜿犃?/strong>的使用

聲明:此文章僅是本人在學習狄泰學院《數(shù)據(jù)結構實戰(zhàn)開發(fā)教程》所做的筆記,文章中包含狄泰軟件資料內容,一切版權歸狄泰軟件所有!
實驗環(huán)境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一些概念 數(shù)據(jù)結構就是研究數(shù)據(jù)的邏輯結構和物理結構以及它們之間相互關系,并對這種結構定義相應的運算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 6,612評論 0 13
  • -DFS(Depth First Search):深度優(yōu)先搜索 訪問完一個頂點的所有鄰接點之后,會按原路返回,對應...
    Spicy_Crayfish閱讀 2,957評論 1 0
  • 圖的定義與術語 1、圖按照有無方向分為無向圖和有向圖。無向圖由頂點和邊構成,有向圖由頂點和弧構成。弧有弧尾和弧頭之...
    unravelW閱讀 505評論 0 0
  • 關鍵詞:MatrixGraph和ListGraph的選擇方式、圖的遍歷概念、廣度優(yōu)先(BFS)、深度優(yōu)先(DFS)...
    編程半島閱讀 481評論 0 0
  • 課程介紹 先修課:概率統(tǒng)計,程序設計實習,集合論與圖論 后續(xù)課:算法分析與設計,編譯原理,操作系統(tǒng),數(shù)據(jù)庫概論,人...
    ShellyWhen閱讀 2,476評論 0 3

友情鏈接更多精彩內容