bfs与dfs基础
bfs像二叉树的层序遍历
像这个图走bfs就{1, 2, 3, 4, 5, 6, 7, 8}这样走;
dfs就{1, 2, 5, 6, 3, 7, 8, 4}。
bfs与queue相结合,走到哪就把哪加进queue,出时把最先进的那个点弹出,同时把弹出这个点有关连的点加入queue。
例:LuoguP5318 dfs与bfs运用
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 5;
ll n, m, k, q, p;
string s, r;
vector<int>a[maxn];//存该点可以走向哪些点,vector第二维可以一直存点
int b[maxn];//用来判断该点有木有经过 void dfs(int x){
if(x >= 1 && x <= n){//经过就输出和标记
b[x] = 1;
cout<<x<<' ';
}
for(int i = 0; i < a[x].size(); i++){
if(!b[a[x][i]])//把没经过的点dfs遍历一遍
dfs(a[x][i]);
}
return;
} void bfs(){
queue<int>q;//队列存点
q.push(1);//点1先进
while(!q.empty()){//判断空否
int p = q.front();
if(b[p] == 0){//队首未经历就输出
b[p] = 1;//标记
cout<<p<<' ';
}
else{//经历过直接弹出到下一次循环
q.pop();
continue;
}
for(int i = 0; i < a[p].size(); i++){
if(!b[a[p][i]])//把点p可以走向的点加入queue
q.push(a[p][i]);
}
q.pop();//不要了弹出
}
} int main(){
//ios_base::sync_with_stdio(0);
//cin.tie(); cout.tie();
cin>>n>>m;
for(int i = 1; i <= m; i++){
cin>>p>>q;
a[p].push_back(q);//点p可以走向q
}
for(int i = 1; i <= n; i++){
sort(a[i].begin(), a[i].end());//依题意从小到大排序,如果大到小自己写个cmp函数
}
dfs(1);//从1开始
memset(b, 0, sizeof(b));//b数组归零用于bfs
cout<<endl;
bfs();
return 0;
}
例:LuoguP3916 反向建边的dfs
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 5;
ll n, m, k, q, p;
string s, r;
vector<int>a[maxn];
int b[maxn], c[maxn];//b标记,c存到达最大值 void dfs(int x){
for(int i = 0; i < a[x].size(); i++){//a[x].size()是可以到x点的数
if(b[a[x][i]] == 0){//看看是否标记
b[a[x][i]] = 1;//现在经历了要标记
c[a[x][i]] = c[x];//c[x]是x能到达的最大值,而a[x][i]能到x,所以它到最大值也是x能到最大值
dfs(a[x][i]);//继续深搜可以到a[x][i]的点
}
}
} int main(){
//ios_base::sync_with_stdio(0);
//cin.tie(); cout.tie();
cin>>n>>m;
for(int i = 1; i <= m; i++){
cin>>p>>q;
a[q].push_back(p);//反向建边,a[q]里为能到达q的点
}
for(int i = n; i >= 1; i--){//因为求到达最大,从n倒着循环就行
if(b[i] == 0){//看看是否经历
b[i] = 1;//现在要经历了标记
c[i] = i;//自己到自己最大
dfs(i);//深度搜能到i点的点把他们可以到达最大值设为i
}
}
for(int i = 1; i <= n; i++)
cout<<c[i]<<' ';//输出1到n能到的最大点
return 0;
}
待续…
bfs与dfs基础的更多相关文章
- 算法基础:BFS和DFS的直观解释
算法基础:BFS和DFS的直观解释 https://cuijiahua.com/blog/2018/01/alogrithm_10.html 一.前言 我们首次接触 BFS 和 DFS 时,应该是在数 ...
- 算法录 之 BFS和DFS
说一下BFS和DFS,这是个比较重要的概念,是很多很多算法的基础. 不过在说这个之前需要先说一下图和树,当然这里的图不是自拍的图片了,树也不是能结苹果的树了.这里要说的是图论和数学里面的概念. 以上概 ...
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/19617187 图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS ...
- 简述BFS与DFS
简述BFS与DFS 最近学习了数据结构课程以及应对蓝桥杯备考,所以花费了一点时间将比较重要的两个搜索BFS(宽度优先搜索)和DFS(深度优先搜索)大致思路以及代码整理出来,如有错误,还请各位大佬批评改 ...
- 【算法】二叉树、N叉树先序、中序、后序、BFS、DFS遍历的递归和迭代实现记录(Java版)
本文总结了刷LeetCode过程中,有关树的遍历的相关代码实现,包括了二叉树.N叉树先序.中序.后序.BFS.DFS遍历的递归和迭代实现.这也是解决树的遍历问题的固定套路. 一.二叉树的先序.中序.后 ...
- HDU-4607 Park Visit bfs | DP | dfs
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...
- BFS和DFS详解
BFS和DFS详解以及java实现 前言 图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇<Get that job at Google!>文章中说到面试官问 ...
- hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- 算法学习之BFS、DFS入门
算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...
随机推荐
- 修改 hosts
不会牛逼操作 -1. 位置.格式 所有系统都差不多,都是 啥啥/etc/hosts 这样的 . 具体去查即可 . 格式: ip + 域名 域名不能含有通配符 hosts 可以绕过 dns 解析,直接访 ...
- Axure RP 8 实现 圆角文本框 圆角带筛选的下拉列表框 可自动显示滚动条
刚开始用Axure 会发现 Axure 元件库并不是很齐全,很多元件需要自己想办法解决 或者去网上去找.其实个人建议网上有现成的元件可以就下载就不必花时间去折腾.除非你也想练练手,原型这种东西除非高保 ...
- 如何开发一款基于 vite+vue3 的在线表格系统(下)
在上篇内容中我们为大家分享了详细介绍Vue3和Vite的相关内容.在本篇中我们将从项目实战出发带大家了解Vite+Vue3 的在线表格系统的构建. 使用Vite初始化Vue3项目 在这里需要注意:根据 ...
- Excel 运算符(三):文本连接符
文本连接符&用来合并文本串.比如,连接"计算机"和"基础"两个文本串:"计算机基础"&"基础",最终结果 ...
- LOJ#2014「SCOI2016」萌萌哒(倍增,并查集优化连边)
题面 点此看题 题意很明白,就不转述了吧. 题解 题目相当于告诉了我们若干等量关系,每个限制 l 1 , r 1 , l 2 , r 2 \tt l_1,r_1,l_2,r_2 l1,r1,l2 ...
- Seatunnel超高性能分布式数据集成平台使用体会
@ 目录 概述 定义 使用场景 特点 工作流程 连接器 转换 为何选择SeaTunnel 安装 下载 配置文件 部署模式 入门示例 启动脚本 配置文件使用参数示例 Kafka进Kafka出的ETL示例 ...
- 1.6_HTML基础属性
name 属性 name 属性用于指定标签元素的名称. <a> 标签内必须提供 href 或 name 属性. <a name="value"> id 属性 ...
- 踩坑 Windows 服务来宿主 .NET 程序
本文所指的 .NET 程序为 .NET6 的程序.因为 .NET 的版本更新很快,所以方式.方法也有变化,所以网上搜到的方法有些也过时了.以下是最近我实践下来的一点心得(坑). 上一篇说到 不安装运行 ...
- HiveSql调优系列之Hive严格模式,如何合理使用Hive严格模式
目录 综述 1.严格模式 1.1 参数设置 1.2 查看参数 1.3 严格模式限制内容及对应参数设置 2.实际操作 2.1 分区表查询时必须指定分区 2.2 order by必须指定limit 2.3 ...
- KingbaseESV8R6 垃圾回收原理以及如何预防膨胀
背景 KingbaseESV8R6支持snapshot too old 那么实际工作中,经常看到表又膨胀了,那么我们讨论一下导致对象膨胀的常见原因有哪些呢? 未开启autovacuum 对于未开启au ...