首页 > 其他分享 >怎么练习BFS?题单给您列好啦!

怎么练习BFS?题单给您列好啦!

时间:2024-07-26 18:26:20浏览次数:13  
标签:www cn luogu 练习 BFS https problem com 题单

前面是介绍,后面是题单哦,准备了两份,要是链接失效可以按照第一份搜题。

BFS 广度优先搜索 ( Breadth-First-Search )
广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索", BFS是用于图的查找算法(要求能用图表示出问题的关联性)。

BFS可用于解决2类问题:
1.从A出发是否存在到达B的路径;DFS也可求

2.从A出发到达B的最短路径;数据小20以内的话, DFS也不是不可以 题眼

整体思路
其思路为从图上一个节点出发,访问先访问其直接相连的子节点,若子节点不符合,再问其子节点的子节点,按级别顺序(一层一层)依次访问,直到访问到目标节点。

步骤
起始:将起点(源点,树的根节点)放入队列中
扩散:从队列中取出队头的结点,将它的相邻结点放入队列,不断重复这一步
终止:当队列为空时,说明我们遍历了所有的能到的结点,整个图能到的点都被搜索了一遍
时空复杂度
时间复杂度 : 最差情形下,BFS必须寻找所有到可能节点的所有路径,因此其时间复杂度为O(|V| + |E|),其中|V|是节点的数目,而|E|是图中边的数目。

空间复杂度 : BFS的空间复杂度为 O(B^h),其中B是最大分支系数,而h是树的最长路径长度(树的高度) 。由于对空间的大量需求,因此BFS并不适合解非常大的问题。

对于所有边长度相同的情况,比如地图的模型,bfs第一次遇到目标点,此时就一定是从根节点到目标节点最短的路径(因为每一次所有点都是向外扩张一步,你先遇到,那你就一定最短)。bfs先找到的一定是最短的。但是如果是加权边的话这样就会出问题了,bfs传回的是经过边数最少的解,但是因为加权了,这个解到根节点的距离不一定最短。比如1000+1000是只有两段,1+1+1+1有4段,由于bfs返回的经过边数最少的解,这里会返回总长度2000的那个解,显然不是距离最短的路径。此时我们就应该采用Dijkstra最短路算法解决加权路径的最短路了。

关于memset和0x3f
int a[100];

memset(a,0x3f,sizeof(a) );
0x3f=0011 1111=63 C++中int型变量所占的位数为4个字节,即32位 0x3f显然不是int型变量中单个字节的最大值,应该是0x7f=0111 1111 B 那为什么要赋值0x3f ??

1.作为无穷大使用
因为4个字节均为0x3f时,0x3f3f3f3f的十进制是1061109567,也就是10^ 9级别的(和0x7fffffff一个数量级),而一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用而不致出现数据大于无穷大的情形。

2.可以保证无穷大加无穷大仍然不会超限。
另一方面,由于一般的数据都不会大于10^9,所以当我们把无穷大加上一个数据时,它并不会溢出(这就满足了**“无穷大加一个有穷的数依然是无穷大”),事实上0x3f3f3f3f+0x3f3f3f3f=2122219134,这非常大但却没有超过32-bit int_MAX的表示范围,所以0x3f3f3f3f还满足了我们“无穷大加无穷大还是无穷大”的需求**。

首先要知道memset函数是以字节为单位进行赋值的;

void memset(void *s, int ch, size_t n);
函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。 其实这里面的ch就是ascii为ch的字符;

将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值

源码复制
# BFS 广度优先搜索 ( Breadth-First-Search )

广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索",  BFS是用于图的查找算法(要求能用图表示出问题的关联性)。

## BFS可用于解决2类问题:

1.从A出发是否存在到达B的路径;DFS也可求

2.从A出发到达B的**最短**路径;数据小20以内的话, DFS也不是不可以 **题眼**

## 整体思路

其思路为从图上一个节点出发,访问先访问其直接相连的子节点,若子节点不符合,再问其子节点的子节点,按级别顺序(一层一层)依次访问,直到访问到目标节点。

## 步骤

- 起始:将起点(源点,树的根节点)放入队列中
- 扩散:从队列中取出**队头的结点**,将它的相邻结点放入队列,不断重复这一步
- 终止:当**队列为空**时,说明我们遍历了所有的能到的结点,整个图能到的点都被搜索了一遍

## 时空复杂度

**时间复杂度** : 最差情形下,BFS必须寻找所有到可能节点的所有路径,因此其时间复杂度为O(|V| + |E|),其中|V|是节点的数目,而|E|是图中边的数目。

**空间复杂度** : BFS的空间复杂度为 O(B^h),其中B是最大分支系数,而h是树的最长路径长度(树的高度) 。由于对空间的大量需求,因此BFS并不适合解非常大的问题。

对于**所有边长度相同**的情况,比如地图的模型,bfs第一次遇到目标点,此时就一定是从根节点到目标节点**最短**的路径(因为每一次所有点都是向外扩张一步,你先遇到,那你就一定最短)。bfs**先**找到的一定是**最短**的。但是如果是**加权边**的话这样就会出问题了,bfs传回的是经过**边数**最少的解,但是因为加权了,这个解到根节点的距离不一定最短。比如1000+1000是只有两段,1+1+1+1有4段,由于**bfs返回的经过边数最少的解**,这里会返回总长度2000的那个解,显然不是距离最短的路径。此时我们就应该采用**Dijkstra**最短路算法解决**加权路径的最短路**了。

例题
acw844. 走迷宫 ,也可以洛谷 P1746 离开中山路

acw是AcWing   

题库 - AcWing

除了acw都是洛谷题目编号,直接搜索就好了   题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


热身 - 简单迷宫问题
P1746 离开中山路 1

P1443 马的遍历 1

P1747 好奇怪的游戏

P2385 Bronze Lilypad Pond B 可控马步

多源BFS
P1332 血色先锋队 1

acw173.矩阵距离 0

染色问题
P1162 填涂颜色9 1

P1506 拯救oibh总部

CF1059B Forgery

有外界干扰的迷宫问题
P2895 Meteor Shower S 天降陨石 

P3395 路障 天降路障 0.5

看起来比较困难的BFS


P2658 汽车拉力比赛 1

P1126 机器人搬重物

P2730 魔板 Magic Squares

双端队列广搜
P4554 小明的游戏 

P3596 棋盘

P4667 Switch the Lamp On

双向广搜
P1746 离开中山路 

P1379 八数码难题 

acw1101.献给阿尔吉侬的花束

UVA439 骑士的移动

P1135 奇怪的电梯

P1032 字串变换

P1825 Corn Maze S

more and more...知道起点和终点状态的都可以用双向BFS来优化时间


P1135 奇怪的电梯 (dfs暴力过不去)

Flood fill --- 找连通块

P1596 Lake Counting S

P1451求细胞数量

P1331 海战

P1767 家族

SP15436 UCV2013H - Slick

迷宫问题
P1683 入门

P1605 迷宫

P1443 马的遍历

P1747 好奇怪的游戏

P2298 Mzc和男家丁的游戏

# 例题

[acw844. 走迷宫](https://www.acwing.com/problem/content/846/)   , 若打不开这个题就看这个 [P1746 离开中山路](https://www.luogu.com.cn/problem/P1746) 

------

------

# 习题课

### 热身 - 简单迷宫问题

[P1746 离开中山路](https://www.luogu.com.cn/problem/P1746)  

[P1443 马的遍历](https://www.luogu.com.cn/problem/P1443)  

--------------[P1747 好奇怪的游戏](https://www.luogu.com.cn/problem/P1747) (跑2次) 

--------------[P2385 Bronze Lilypad Pond B](https://www.luogu.com.cn/problem/P2385) 可控马步

### 多源BFS

[P1332 血色先锋队](https://www.luogu.com.cn/problem/P1332)  

--------------------[acw173.矩阵距离](https://www.acwing.com/problem/content/175/)  

### 染色问题

[P1162 填涂颜色](https://www.luogu.com.cn/problem/P1162)

-----------------------[P1506 拯救oibh总部](https://www.luogu.com.cn/problem/P1506) 

-----------------------[CF1059B Forgery](https://www.luogu.com.cn/problem/CF1059B) 

### 有外界干扰的迷宫问题

[P2895 Meteor Shower S](https://www.luogu.com.cn/problem/P2895) 天降陨石 1

--------------------[P3395 路障](https://www.luogu.com.cn/problem/P3395) 天降路障 0.5

### 看起来比较困难的BFS

[P2658 汽车拉力比赛](https://www.luogu.com.cn/problem/P2658) 1

--------------[P1126 机器人搬重物](https://www.luogu.com.cn/problem/P1126) 

[P2730 魔板 Magic Squares](https://www.luogu.com.cn/problem/P2730) 

### 双端队列广搜 

[P4554 小明的游戏](https://www.luogu.com.cn/problem/P4554) 1

--------------------------[P3596 棋盘](https://www.luogu.com.cn/problem/P3956) 

--------------------------[P4667 Switch the Lamp On](https://www.luogu.com.cn/problem/P4667) 

### 双向广搜

[P1746 离开中山路](https://www.luogu.com.cn/problem/P1746) 

[P1379 八数码难题](https://www.luogu.com.cn/problem/P1379)  

------------[acw1101.献给阿尔吉侬的花束](https://www.acwing.com/problem/content/description/1103/?utm_source=wechat_session&utm_medium=social&utm_oi=1237383479098585088) 

------------[UVA439 骑士的移动](https://www.luogu.com.cn/problem/UVA439) 

------------[P1135 奇怪的电梯](https://www.luogu.com.cn/problem/P1135) 

------------[P1032 字串变换](https://www.luogu.com.cn/problem/P1032) 

------------[P1825 Corn Maze S](https://www.luogu.com.cn/problem/P1825) 

------------more and more...知道起点和终点状态的都可以用双向BFS来优化时间

------

## 作业 (上节课DFS过不去, 这节课可以用BFS试一试~)

[P1135 奇怪的电梯](https://www.luogu.com.cn/problem/P1135)  dfs暴力过不去

**Flood fill** --- **找连通块**

[P1596 Lake Counting S](https://www.luogu.com.cn/problem/P1596) 

[P1451求细胞数量](https://www.luogu.com.cn/problem/P1451) 

[P1331 海战](https://www.luogu.com.cn/problem/P1331) 

[P1767 家族](https://www.luogu.com.cn/problem/P1767) 

[SP15436 UCV2013H - Slick](https://www.luogu.com.cn/problem/SP15436) 

### 迷宫问题

[P1683 入门](https://www.luogu.com.cn/problem/P1683) 

[P1605 迷宫](https://www.luogu.com.cn/problem/P1605) 

[P1443 马的遍历](https://www.luogu.com.cn/problem/P1443) 

[P1747 好奇怪的游戏](https://www.luogu.com.cn/problem/P1747) 

[P2298 Mzc和男家丁的游戏 ](https://www.luogu.com.cn/problem/P2298) 

标签:www,cn,luogu,练习,BFS,https,problem,com,题单
From: https://blog.csdn.net/a82988/article/details/140722326

相关文章

  • 前端练习<Html&CSS>——悬浮抽卡片(附完整代码及实现效果)
    这个小练习来源于b站up小K师兄,大家可以通过下面的链接学习哦~up讲的非常详细。写一个好玩的悬浮抽卡片效果~先看一下效果:1.鼠标没有放置到card上2.鼠标放到card上,所有card呈角度散开 3.单击选中某一张卡片,卡片上浮高亮,其他卡片变暗 HTML部分<html> 标签定义了整个H......
  • 容易的多元拉格朗日反演练习题
    你说得对,但确实和题目没有一点关系。模拟赛记录下午出。题面看到Alice和Bob就知道是什么题了。思路这个题开始先胡乱想想,发现按照博弈论的思路,那么每次Bob行动一步后,Alice需要有对应的策略,也就是说,若Alice必胜,这次行动应该是固定的最优策略步。然后再代入一下,如果......
  • 洛谷题单指南-前缀和差分与离散化-P3397 地毯
    原题链接:https://www.luogu.com.cn/problem/P3397题意解读:给定一个n*n的矩阵,每个元素初始值为0,再将m个子矩阵中的元素都增加1,统计每个元素最终的值。解题思路:1、暴力法枚举每一个子矩阵,将对应元素值加1,时间复杂度为1000^3,不可行。2、二维差分对于给定二维数组s[][],给指定区......
  • E19.【C语言】练习:数组
    有序序列合并描述输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。数据范围:1≤n,m≤1000 ,序列中的值满足0≤val≤30000输入描述:输入包含三行,第一行包含两个正整数n,m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数......
  • 洛谷题单指南-前缀和差分与离散化-P2367 语文成绩
    原题链接:https://www.luogu.com.cn/problem/P2367题意解读:对于数组s[],给指定q个区间[x,y]里每个数增加z,计算操作之后最小的数。解题思路:1、暴力做法对于每一个区间[x,y],枚举给每一个数增加z,然后遍历查找最小值,总体时间复杂度为O(N^2),不可行。2、一维差分对于给指定区间[x,......
  • MySQL基础练习20题,看看你的sql基础man不man
    数据获取表的数据信息(sql文件)放在这个链接里了,提取码:52xz,需要的自行提取。数据来自网上的练习,已经给小伙伴们总结好了。https://pan.baidu.com/s/11YMWaXtZb9K60cpOuYTwag将数据导入到mysql中大家可以直接在navicat运行该脚本,就可以直接导入数据了,如果遇到问题很可能是编码......
  • 洛谷题单指南-前缀和差分与离散化-P1314 [NOIP2011 提高组] 聪明的质监员
    原题链接:https://www.luogu.com.cn/problem/P1314题意解读:计算m个检验值之和,计算与s差值绝对值的最小值。解题思路:1、首先要搞懂检验值是如何计算的如上图,对于每一个区间的检验值yi,表示为:yi="该区间重量>=W的矿石个数" ✖️"该区间>=W的矿石价值之和"检验值y即所有yi(1<=......
  • (三)复习第三课(07.20- 07.25第二轮):HTML标签元素练习大全
    <!DOCTYPEhtml><!--练习时间:2024.07.20-2024.07.25--><htmllang="en"><!--添加了en可以让你的网站打开时会提示翻译--><head> <pid="head1"></p><metacharset="utf-8"><!--对于中文网页需要使用此标签声明编码,否则会出现......
  • 洛谷刷题题单
    【算法1-1】模拟与高精度 [NOIP2003普及组]乒乓球 [NOIP2003普及组]乒乓球......
  • 洛谷题单指南-前缀和差分与离散化-P8218 【深进1.例1】求区间和
    原题链接:https://www.luogu.com.cn/problem/P8218题意解读:对于数组a[N],给定m个区间l~r,求每个区间所有元素之和。解题思路:先思考暴力做法:对于每一个区间[l,r],累加a[l]~a[r]所有元素,时间复杂度最坏为10^5*10^4,不可行。一维前缀和:设s[N]是a[N]的前缀和数组,即对于每一个s[i......