首页 > 代码库 > 数据结构--DFS和BFS
数据结构--DFS和BFS
专题--深度优先搜索与广度优先搜索
知识点:
邻接矩阵结构;
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 MGraph11 {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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。