图的广度优先遍历(bfs)
广度优先遍历:
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)的更多相关文章
- 算法学习 - 图的广度优先遍历(BFS) (C++)
广度优先遍历 广度优先遍历是非经常见和普遍的一种图的遍历方法了,除了BFS还有DFS也就是深度优先遍历方法.我在我下一篇博客里面会写. 遍历过程 相信每一个看这篇博客的人,都能看懂邻接链表存储图. 不 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 图的广度优先遍历算法(BFS)
在上一篇文章我们用java演示了图的数据结构以及图涉及到的深度优先遍历算法,本篇文章将继续演示图的广度优先遍历算法.广度优先遍历算法主要是采用了分层的思想进行数据搜索.其中也需要使用另外一种数据结构队 ...
- PTA 邻接表存储图的广度优先遍历(20 分)
6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...
- 广度优先遍历-BFS、深度优先遍历-DFS
广度优先遍历-BFS 广度优先遍历类似与二叉树的层序遍历算法,它的基本思想是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问的顶点w1 w2 w3....wn,然后再依次访问w1 w2 w3 ...
- PTA 邻接表存储图的广度优先遍历
试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ) 其中LGraph是邻接表存储的 ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...
- 17.广度优先遍历bfs
#include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...
随机推荐
- 7-36 jmu-python-统计字符个数 (10 分)
输入一个字符串,统计其中数字字符及小写字符的个数 输入格式: 输入一行字符串 输出格式: 共有?个数字,?个小写字符,?填入对应数量 输入样例: helo134ss12 输出样例: 共有5个数字,6个 ...
- Fetch API与POST请求那些事
简述 相信不少前端开发童鞋与后端联调接口时,都会碰到前端明明已经传了参数,后端童鞋却说没有收到,尤其是post请求,遇到的非常多.本文以node.js作为服务端语言,借用express框架,简要分析客 ...
- HTML5历史管理状态机制
前言:想要不刷新页面同时改变url 可以用HTML5 window对象的 hashChange 事件.同时介绍两个相关的api 和 1个事件. 两个API:1.history.pushState({n ...
- 谈谈集合.Stream Api
1. 什么是stream API Java8提供的stream API可以让程序员像操作数据库一样操作集合.Stream API可以极大提高Java程序员的生产力,让程序员写出高效率.干净.简洁的代码 ...
- PHP mysql事务问题实例分析
本文实例分析了PHP的mysql事务问题.分享给大家供大家参考,具体如下: 对于myisam数据库,可以控制事务的进行: $mysqlrl = mysql_connect ( $db_config [ ...
- 基于GIS空间分析的多边形提取技术
现有基于矢量图形的骨架线提取方法主要包括数据预处理.基于约束 Delauny 三角剖分的骨架线结点生成和骨架线的连接 3 个过程,上述过程都可利用现有 GIS 系统的数据处理.空间分析和建模功能实现. ...
- Z字头:逐浪字库入选微软全球主流字体厂商列表
北京时间2019年6月20日消息: 来自中国的字库厂商--逐浪,成功获得全球软件巨擎.电子出版与数字印刷权威平台-微软的认证,成为获此国际认证的首家字体厂商. 微软公司为了更好的规范国际字库与出版,制 ...
- 练习div出现的小问题
一.出现图片不显示状况1.class中设定的名字不对2.在高单位后面出现了 “:“ 所以也不显示3.上一个div盒子没有写结束标签 4.在添加背景图,把height的值改成auto后不显示,填上具体数 ...
- 数据库事务ACID详解(转载)
转载自:http://blog.csdn.net/shuaihj/article/details/14163713 谈谈数据库的ACID 一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行 ...
- 关于emgucv控制多摄像头问题
看到这篇文章你或许已经查阅很多资料,也可能你刚准备深入研究,但是关于调用多摄像头问题我要说明一点,关于多摄像头调用 取决于你电脑本身USB控制器数量,不是说你电脑上5个usb就可以同时控制5台摄像头, ...