數據結構--DFS和BFS
阿新 • • 發佈:2017-07-12
一個 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