当前位置: 首页 > article >正文

【C++刷题注意事项】bfs?单源bfs?多源bfs?bfs解决拓扑排序?

一、bfs是个什么?

简单而言bfs就是个广度优先遍历,其根本就是我把与跟我当前点相邻的题目中所要求的点都统计出来并进行处理,再去遍历下一个满足的点的邻接的点的信息即可,最大的优势就是只需要不停的入队和出队即可。
那么我们就先来一道开胃菜看看格式:
在这里插入图片描述
使用俩数据结构,一个是queue<pair<int, int>> q;(用来存下标)和bool vis数组用来标记是否已经访问过了。我们只需要用四个方向也就是下面展示的dx和dy即可,对应的下标关系分别对应着上下左右四个方向进行遍历即可,直到队列为空。
在这里插入图片描述
在这里插入图片描述

二、单源bfs

什么是单源bfs,那就是每条边都连接的是1,找从一个位置到另一个位置的最小距离了。
我们看下面一道开胃小菜:
利用一个hash表将bank基因库中的所有字符串都放到哈希表中,这样就不会有重复的字符串了,那么后面仅需将当前字符串逐一更改与基因库bank中进行比对即可,比对成功了就进行插入队列中,直到最后匹配到了目标字符串了。
在这里插入图片描述

三、多源bfs

多源bfs其实更简单了,这里可不是简单的把路径大小改变啊!这里是先push到队列中的初始的值先push进队列中,此时只需要将队列中的值先进行操作并pop出队列即可,再后期往左右上下进行遍历后满足条件加入到队列中即可。
在这里插入图片描述
在这里插入图片描述

四、拓扑排序

拓扑排序如下图,我们先找到入度为0的点拿出来进行操作并将其所有连接的边都删去即可,然后一直找到最后一个入度为0的点即可。
在这里插入图片描述
而我们下面所展示的题目是课程表,我们没有边的概念,我们建图用的是unoreded_map或者vector<vector>二维矩阵,只需要将头(入度为0)的点先找到,后在后面插入相连的点后进行操作即可。
在这里插入图片描述


http://www.kler.cn/a/382246.html

相关文章:

  • 【FL0013】基于SpringBoot和微信小程序的机电公司管理信息系统
  • 深入理解 C++ 中的 std::vector
  • Jtti:FTP服务器与HTTP服务器的区别有哪些?
  • 基于SpringBoot的免税商品优选购物商城的设计与实现
  • 【Linux系统编程】第四十二弹---多线程编程全攻略:涵盖线程创建、异常处理、用途、进程对比及线程控制
  • 单臂路由技术,eNSP实验讲解
  • PH热榜 | 2024-11-06
  • 写歌词的技巧和方法:精准用词,让歌词熠熠生辉,妙笔生词AI智能写歌词软件
  • 真·香!深度体验 zCloud 数据库云管平台 -- DBA日常管理篇
  • 【C++】手动实现C++ vector容器:深入理解动态数组的工作原理
  • 多线程案例---单例模式
  • Jmeter命令监控CPU等指标
  • 【R语言】解决package ‘qvalue’ is not available (for R version 3.6.1)
  • 登录注册窗口(一)
  • 空元组同一空间,空列表不是同一空间print(a is b, c is d)
  • AWS云服务器选择哪个区域最好?
  • 2024江苏省网络建设与运维省赛linux解析答案(整合)
  • js--高阶函数之参数归一化
  • Fast-lio2+回环综述
  • 数据结构——图的基本操作
  • 快速删除iPhone照片:释放你的空间,加速你的手机
  • 华为 HarmonyOS NEXT 原生应用开发: 动画的基础使用(属性、显示、专场)动画
  • 学习方法该升级了,‌AI时代的弯道超车:【心流学习法】行动与意识合一的巅峰进化
  • 使用docker安装zlmediakit服务(zlm)
  • 《分析科学学报》
  • 关于安卓升级gradle8.0和jdk17的要点