在之前的博文中,介绍了图的深度优先遍历,并分别进行了递归和非递归实现。BFS 无法递归实现,最广泛的实现是利用队列(queue)。这与DFS的栈实现是极其相似的,甚至代码几乎都很少需要改动。从给定的起点节点开始,依次将其邻接节点全部塞入队列,每次访问一个节点时将其pop()出队列,并将其邻接节点也塞入队列。直到队列为空,算法结束。

  代码实现并无太大障碍,c++实现:

 #include <iostream>
#include <queue>
using namespace std; #define MAX 20
#define START 1 int visited[MAX];
int map[MAX][MAX]; void bfs(int start, int n){
queue<int> q;
int q_top;
cout<<start<<" ";
visited[start] = ;
for (int i = ; i <= n ;i++ ) {
if(map[start][i] == && visited[i] == ){
q.push(i);
visited[i] = ;
}
}
while(!q.empty()){
q_top = q.front();
q.pop();
cout<<q_top<<" ";
for(int i = ; i <= n; i++ ){
if(map[q_top][i] == && visited[i] == ){
q.push(i);
visited[i] = ;
}
}
} } int main(int argc, const char * argv[]) {
int num_vex,num_edge,x,y;
cout<<"Input number of nodes and edges >> ";
cin>>num_vex>>num_edge;
for(int i=;i<MAX;i++){
for(int j = ;j < MAX;j++){
map[i][j] = ;
}
}
for(int i = ;i <= num_vex;i++){
visited[i] = ;
}
cout<<"Input edges, "<<num_edge<<" left >> ";
for(int i = ;i <= num_edge;i++){
cin>>x>>y;
map[x][y] = map[y][x] = ;
cout<<"Input edges, "<<(num_edge-i)<<" left >> ";
}
bfs(START, num_vex);
return ;
}

图的广度优先/层次 遍历(BFS) c++ 队列实现的更多相关文章

  1. 【算法导论】图的广度优先搜索遍历(BFS)

    图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...

  2. 图的创建和遍历(BFS/DFS)

    图的表示方法主要有邻接矩阵和邻接表.其中邻接表最为常用,因此这里便以邻接表为例介绍一下图的创建及遍历方法. 创建图用到的结构有两种:顶点及弧 struct ArcNode { int vertexIn ...

  3. 图的广度优先搜索(BFS)

    把以前写过的图的广度优先搜索分享给大家(C语言版) #include<stdio.h> #include<stdlib.h> #define MAX_VERTEX_NUM 20 ...

  4. 图的遍历——BFS(队列实现)

    #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...

  5. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

  6. 二叉树前中后/层次遍历的递归与非递归形式(c++)

    /* 二叉树前中后/层次遍历的递归与非递归形式 */ //*************** void preOrder1(BinaryTreeNode* pRoot) { if(pRoot==NULL) ...

  7. 毕业了-java二叉树层次遍历算法

    /*************************************** * 时间:2017年6月23日 * author:lcy * 内容:二叉树的层次遍历 * 需要借助队列这个数据结构,直 ...

  8. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  9. 图的广度优先遍历算法(BFS)

    在上一篇文章我们用java演示了图的数据结构以及图涉及到的深度优先遍历算法,本篇文章将继续演示图的广度优先遍历算法.广度优先遍历算法主要是采用了分层的思想进行数据搜索.其中也需要使用另外一种数据结构队 ...

随机推荐

  1. .NET Web开发之.NET MVC框架

    摘要:MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序.那么什么是MVC?MVC由三部分组成:Model(模型).View(视图)及Controller(控制器). MVC概 ...

  2. 通过递归方法对一个单词所有的组合进行列举(java)

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public ...

  3. Category类别

    1.在已有类的基础上进行扩展,无需像继承一样子类化,就可以直接添加一些方法 2.继承不仅可以添加方法还可以添加属性,类别只能添加方法 3.类别不会改变现有类的方法,万一重写,自己写的优先级高 4.把类 ...

  4. python 2.6升级到2.7

    CentOS 6.5上安装的python版本是2.6.6,不能满足我运行软件的要求,所以对python进行升级. 原以为这也就是安装个软件的事儿,在我求稳搜索一下了之后发现,也并不是那么单纯简单. 下 ...

  5. 【Heritrix基础教程之2】Heritrix基本内容介绍

    1.版本说明 (1)最新版本:3.3.0 (2)最新release版本:3.2.0 (3)重要历史版本:1.14.4 3.1.0及之前的版本:http://sourceforge.net/projec ...

  6. Vector, ArrayList, Array

    JAVA新手在使用JAVA的时候大概都会遇到这个问题: JAVA中的Array, ArrayList, Vector, List, LinkedList有什么样的区别?尤其是Vector, Array ...

  7. Nginx 变量漫谈(五)

    前面在 (二) 中我们已经了解到变量值容器的生命期是与请求绑定的,但是我当时有意避开了“请求”的正式定义.大家应当一直默认这里的“请求”都是指客户端发起的 HTTP 请求.其实在 Nginx 世界里有 ...

  8. Sql Server专题:SQL 经典实例

    SQL 经典实例 1.实例表: Student(S#,Sname,Sage,Ssex) 学生表 S#:学号:Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Course(C#,Cname ...

  9. DEP受保护的问题(尤其是Outlook)

    We see this issue quite regularly as we use MAPI and lots of our users run our application on TS. Of ...

  10. 注册flash.ocx inno setup (转)

    ; 脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "xx模块" #de ...