首页 > 其他 > 详细

数据结构--DFS和BFS

时间:2017-07-12 22:27:23      阅读:271      评论:0      收藏:0      [点我收藏+]

专题--深度优先搜索与广度优先搜索

知识点:

  邻接矩阵结构;

  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

原文:http://www.cnblogs.com/cygalaxy/p/7157811.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!