1. 程式人生 > >數據結構--DFS和BFS

數據結構--DFS和BFS

一個 spa namespace bsp num max 鄰接矩陣 bool traverse

專題--深度優先搜索與廣度優先搜索

知識點:

  鄰接矩陣結構;

  DFS深度優先搜索;

  BFS廣度優先搜索。

 1 #include <iostream>
 2 #include <queue>
 3 using namespace std;
 4 
 5 typedef char VertexType;
 6 typedef int EdgeType;
 7 const int MAXVEX=100;
 8 const int INFINITY=65535;
 9 
10 struct MGraph
11 {
12     VertexType vexs[MAXVEX];      //
頂點表 13 EdgeType arc[MAXVEX][MAXVEX]; //鄰接矩陣,可看做邊表 14 int numVertexes,numEdges; //圖中當前的頂點數和邊數 15 }; 16 17 //深度優先 18 void DFS(MGraph,int); //函數前置聲明 19 bool visited[MAXVEX]; 20 void DFSTraverse(MGraph G) 21 { 22 for(int i=0;i<G.numVertexes;++i) 23 visited[i]=false; 24 for
(int i=0;i<G.numVertexes;++i) 25 if(!visited[i]) 26 DFS(G,i); //若是連通圖,只會執行一次 27 } 28 void DFS(MGraph G,int i) 29 { 30 visited[i]=true; 31 cout<<G.vexs[i]<<endl; 32 33 for(int j=0;j<G.numVertexes;++j) 34 if(G.arc[i][j]==1&&!visited[j]) //
有連接且還未訪問 35 DFS(G,j); //遞歸調用 36 } 37 //廣度優先 38 void BFSTraverse(MGraph G) 39 { 40 for(int i=0;i<G.numVertexes;++i) 41 visited[i]=false; 42 queue<int> Q; //申請一個輔助隊列 43 for(int i=0;i<G.numVertexes;++i) 44 { 45 visited[i]=true; 46 cout<<G.vexs[i]<<endl; 47 48 Q.push(i); //入隊列 49 while(!Q.empty()) 50 { 51 int i=Q.front(); //取出首元素 52 Q.pop(); //刪除隊列首元素 53 for(int j=0;j<G.numVertexes;++j) 54 { 55 if(G.arc[i][j]==1&&!visited[j]) 56 { 57 visited[j]=true; 58 Q.push(j); //入隊列 59 } 60 } 61 } 62 } 63 64 }

數據結構--DFS和BFS