码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构--DFS和BFS

时间:2017-07-12 23:33:51      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:ons   iostream   连通图   arc   调用   声明   队列   class   empty   

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

知识点:

  邻接矩阵结构;

  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

标签:ons   iostream   连通图   arc   调用   声明   队列   class   empty   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!