广度优先遍历:

1.将起点s 放入队列Q(访问)

2.只要Q不为空,就循环执行下列处理

(1)从Q取出顶点u 进行访问(访问结束)

(2)将与u 相邻的未访问顶点v 放入Q, 同时将d[v]更新为d[u] + 1

主要变量

M[n][n] 邻接矩阵,如果存在顶点i到顶点j 的边,则M[i][j] 为true
Queue Q 记录下一个待访问顶点的队列
d[n]

将起点s 到个顶点i的最短距离记录在d[i]中。

s无法到达i 时d[i] 为INFTY(极大值)

 #include<iostream>
#include<queue>
using namespace std; static const int N = ;
static const int INFTY = ( << ); int n, M[N][N];
int d[N];//用来存储v到起始顶点的距离 void bfs(int s) {
queue <int> q;
q.push(s);//起始顶点 入队
//设置初始值, 通过判断距离大小来明白该顶点是否被访问
for(int i = ; i < n; i++) d[i] = INFTY;
d[s] = ;//初始值为0
int u;
while( !q.empty() ) {
u = q.front();
q.pop();
//检索与该顶点有连接的顶点,并入队
for(int v = ; v < n; v++) {
if(M[u][v] = ) continue;
//如果该顶点被访问过
if(d[v] != INFTY) continue;
//该顶点与起始顶点的距离等于,上一个顶点与起始顶点距离加1
d[v] = d[u] + ;
q.push(v);
}
}
//输出,若未被访问则输出-1
for(int i = ; i < n; i++) {
cout << i + << " " << ( (d[i] == INFTY) ? (-) : d[i] ) << endl;
}
} int main() {
int u, k, v;
cin >> n;
//初始化
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++)
M[i][j] = ;
}
//输入数据构建邻接矩阵
for(int i = ; i < n; i++) {
cin >> u >> k;
u--;
for(int j = ; j < k; j++) {
cin >> v;
v--;
M[u][v] = ;
}
}
//广度优先遍历
bfs(); return ;
} /*
4
1 2 2 4
2 1 4
3 0
4 1 3
*/

图的广度优先遍历(bfs)的更多相关文章

  1. 算法学习 - 图的广度优先遍历(BFS) (C++)

    广度优先遍历 广度优先遍历是非经常见和普遍的一种图的遍历方法了,除了BFS还有DFS也就是深度优先遍历方法.我在我下一篇博客里面会写. 遍历过程 相信每一个看这篇博客的人,都能看懂邻接链表存储图. 不 ...

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

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

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

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

  4. PTA 邻接表存储图的广度优先遍历(20 分)

    6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...

  5. 广度优先遍历-BFS、深度优先遍历-DFS

    广度优先遍历-BFS 广度优先遍历类似与二叉树的层序遍历算法,它的基本思想是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问的顶点w1 w2 w3....wn,然后再依次访问w1 w2 w3 ...

  6. PTA 邻接表存储图的广度优先遍历

    试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ) 其中LGraph是邻接表存储的 ...

  7. 图的深度优先遍历(DFS)和广度优先遍历(BFS)

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  8. 图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析

    1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...

  9. 17.广度优先遍历bfs

    #include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...

随机推荐

  1. Ubuntu 18.04 国内的 apt 源

    一.Ubuntu 18.04 国内的 apt 源 1. 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted univers ...

  2. SDWebImage -- 封装 (网络状态检测,是否打开手机网络下下载高清图设置)

    对SDWebImage 进行封装,为了更好的节省用户手机流量,并保证在移动网络下也展示高清图,对使用SDWebImage 下载图片之前进行逻辑处理,根据本地缓存中是否有缓存原始的图片,用户是否打开移动 ...

  3. linux 下修改最大文件数

    环境为centosV7系列 1.查看进程的打开最大文件数,默认为1024 [root@localhost ~]# ulimit -a core file size (blocks, -c) 0 dat ...

  4. Docker深入浅出系列 | Docker Compose多容器实战

    目录 前期准备 Docker Compose是什么 为什么要用Docker Compose Docker Compose使用场景 Docker Compose安装 Compose Yaml文件结构 C ...

  5. 前端每日实战:114# 视频演示如何用纯 CSS 和混色模式创作一个 loader 动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/MqYroW 可交互视频 此视频是可 ...

  6. nodejs通过响应回写的方式渲染页面资源

    我们一般通过node框架提供的api操作页面渲染,如何利用原始回写的方式来实现同样的功能呢下面是通过node 提供的异步地读取一个文件的全部内容api readFile进行操作,代码如下: html ...

  7. Nginx + uWSGI部署中的一些小坑

    1.invalid host in upstream报错 重新启动nginx : sudo /etc/init.d/nginx restart 原因是在配置负载均衡nginx.conf配置文件时,发现 ...

  8. Nginx 推流 拉流 --- 点播直播

    1. 准备环境 安装操作系统Cenos 配置yum源 yum:https://developer.aliyun.com/mirror/ Nginx依赖 gcc-c++ zlib pcre openss ...

  9. Expression表达式目录树

    一.初识Expression 1.在上一篇我们讲到了委托(忘记了可以在看看,点赞在看养成习惯),今天要讲的Expression也和委托有一点点关系吧(没有直接关系,只是想要大家看看我其他的文章),Ex ...

  10. js 碰撞+拖拽

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...