演算法之圖搜尋演算法(一)_演算法

來源:互聯網
上載者:User
1. 介紹

本文介紹了比較初級的圖搜尋演算法,包括深度優先遍曆,廣度優先遍曆和雙向廣度優先遍曆。

2. 深度優先遍曆DFS

2.1 演算法思想

從圖中某個頂點v開始,訪問此節點,然後依次從v中未被訪問的鄰接點出發深度優先遍曆圖,直到圖中上所有和v有路徑相通的頂點都被訪問;若此時圖中尚有頂點未被訪問,則另選圖中一個未被訪問頂點做起點,重複以上過程,直到圖中所有頂點都被訪問為止。

深度優先搜尋遍曆類似於樹的先序遍曆。假定給定圖G的初態是所有頂點均未被訪問過,在G中任選一個頂點i作為遍曆的初始點,則深度優先搜尋遍曆可定義如下:

(1) 首先訪問頂點i,並將其訪問標記置為訪問過,即visited[i]=1;

(2) 然後搜尋與頂點i有邊相連的下一個頂點j,若j未被訪問過,則訪問它,並將j的訪問標記置為訪問過,visited[j]=1,然後從j開始重複此過程,若j已訪問,再看與i有邊相連的其它頂點;

(3) 若與i有邊相連的頂點都被訪問過,則退回到前一個訪問頂點並重複剛才過程,直到圖中所有頂點都被訪問完止。

2.2 演算法實現

鄰接矩陣的演算法描述為下面形式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 void dfs1 (graph & g, int i, int n)         // 從頂點i 出發遍曆   {      cout<<g.v[i];                //輸出訪問頂點      visited[i]=1;                    //訪問標記置1表示已經訪問      for (j=1; j<=n; j++)        if ((g.arcs[i ][j]= =1)&&(!visited[j]))          dfs(g,j,n);   }

鄰接表演算法描述為下面形式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.