图(树)的广度优先遍历bfs
图的广度优先遍历
广度优先遍历,就是在遍历时优先考虑遍历的广度,不像深度优先那样一条路径遍历到底,而是一层一层的遍历。
由于广度优先是一层一层节点的遍历,在图的边权值都为1的情况下,若我们要求出节点a到节点b的最短路,就可以以a为源点(source)进行广搜,当a第一次搜到b时,其路径一定最短。因为在广搜时每一层的节点距离a的距离都是相同的,层数越多距离a越远,因此第一次搜到b时,b所在的层数最小,于是距离a的距离也就最小
不论是图的广搜还是树的广搜,我们都可以看到他们都是从源点开始,逐层搜索源点的邻接点及其邻接点的邻接点。因此我们需要一个数据结构来存储一个点的所有邻接点,于是我们选择队列来实现深度优先搜索。
方便起见可以使用queue库来建立一个队列,但当想存储整个队列的状态时可以选择自己建立一个队列
这里图的存储采用邻接表法使用vector来存
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int N = 10;
vector<int> h[N];
queue<int> q;
int s;
bool check[N];
void bfs()
{
q.push(s);//将源点压入队列
while (!q.empty())//队列不空就继续遍历
{
int k = q.front(); q.pop();//从队列中取出一个节点
for (int i = 0; i < h[k].size(); i++)
{
int temp = h[k][i];
if (!check[temp])//将其未遍历到的邻接点存储进去
{
check[temp] = true;
q.push(temp);
}
}
}
}
图(树)的广度优先遍历bfs的更多相关文章
- 广度优先遍历-BFS、深度优先遍历-DFS
广度优先遍历-BFS 广度优先遍历类似与二叉树的层序遍历算法,它的基本思想是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问的顶点w1 w2 w3....wn,然后再依次访问w1 w2 w3 ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 算法学习 - 图的广度优先遍历(BFS) (C++)
广度优先遍历 广度优先遍历是非经常见和普遍的一种图的遍历方法了,除了BFS还有DFS也就是深度优先遍历方法.我在我下一篇博客里面会写. 遍历过程 相信每一个看这篇博客的人,都能看懂邻接链表存储图. 不 ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...
- 图的创建和遍历(BFS/DFS)
图的表示方法主要有邻接矩阵和邻接表.其中邻接表最为常用,因此这里便以邻接表为例介绍一下图的创建及遍历方法. 创建图用到的结构有两种:顶点及弧 struct ArcNode { int vertexIn ...
- 树的广度优先遍历和深度优先遍历(递归非递归、Java实现)
在编程生活中,我们总会遇见树性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程.现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的) 1.广度优先遍历 英文缩写为BFS即B ...
- 17.广度优先遍历bfs
#include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...
- 【C++】基于邻接矩阵的图的深度优先遍历(DFS)和广度优先遍历(BFS)
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- 题目1457:非常可乐(广度优先遍历BFS)
题目链接:http://ac.jobdu.com/problem.php?pid=1457 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- 图的广度优先遍历(bfs)
广度优先遍历: 1.将起点s 放入队列Q(访问) 2.只要Q不为空,就循环执行下列处理 (1)从Q取出顶点u 进行访问(访问结束) (2)将与u 相邻的未访问顶点v 放入Q, 同时将d[v]更新为d[ ...
随机推荐
- 如何让 Llama2、通义千问开源大语言模型快速跑在函数计算上?
本文是"在Serverless平台上构建AIGC应用"系列文章的第一篇文章. 前言 随着ChatGPT 以及 Stable Diffusion,Midjourney 这些新生代 A ...
- java基础-Junit 注解 枚举-day12
目录 1. Junit 2. 注解 annotation 3. 枚举 1. Junit 白盒测试 黑盒测试 自行baidu了解 java单元测试 package com.msb01; import o ...
- AI伴侣下载
总结 现在网页上很多下载的AI伴侣下载下来都会有些问题或者不能用,如下链接下载的AI伴侣亲测可以使用! (连接后会提示更新,博主没有选择更新,如有需要也可以更新) https://mit-ai2-co ...
- js - 使用 scroll属性手撸轮播图 —— 无缝连接,更丝滑
上效果图: 上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- .NET集成IdGenerator生成分布式全局唯一ID
前言 生成分布式唯一ID的方式有很多种如常见的有UUID.Snowflake(雪花算法).数据库自增ID.Redis等等,今天我们来讲讲.NET集成IdGenerator生成分布式全局唯一ID. 分布 ...
- Django应用中的静态文件处理
在日常开发中,我们都是把Django的Debug模式打开,方便调试,在这个模式下,由Django内置的Web服务器提供静态文件服务,不过需要进行一些配置,才能正确访问. 配置settings # St ...
- 不同数据库创建用户,数据库的SQL语句整理
不同数据库创建用户,数据库的SQL语句整理 MySQL mysql -uroot -p # 输入密码登录数据库 CREATE DATABASE IF NOT EXISTS xxxdata_somein ...
- [转帖]使用 TiUP 升级 TiDB
本文档适用于以下升级路径: 使用 TiUP 从 TiDB 4.0 版本升级至 TiDB 7.1. 使用 TiUP 从 TiDB 5.0-5.4 版本升级至 TiDB 7.1. 使用 TiUP 从 Ti ...
- [转帖]三篇文章了解 TiDB 技术内幕 - 说存储
https://cn.pingcap.com/blog/tidb-internal-1 引言 数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层,是很多业务的 ...
- [转帖]不同CPU性能大PK
https://plantegg.github.io/2022/01/13/%E4%B8%8D%E5%90%8CCPU%E6%80%A7%E8%83%BD%E5%A4%A7PK/ 前言 比较Hygon ...
