![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
BFS
BFS搜索的例题
超级码力奥
这个作者很懒,什么都没留下…
展开
-
剑指offer:机器人的运动范围
这道题我太傻逼了,我入队的时候,++ hh 写成 hh ++ 了。。原题链接:https://www.acwing.com/problem/content/description/22/class Solution {public: int get_sum(int x, int y) { int sum = 0; while(x) { sum += x % 10; x /= 10原创 2022-04-06 19:13:52 · 291 阅读 · 0 评论 -
染色法判定二分图:BFS+DFS版本
染色法将所有点分成两个集合,使得所有边只出现在集合之间,就是二分图二分图:一定不含有奇数环,可能包含长度为偶数的环, 不一定是连通图dfs(起点)dfs (u,c)函数:对当前点u进行染色,染成c色遍历u的所有临边,对于每个临边:如果被染过色且染的还是c,返回false如果没有被染过:尝试对这个点使用c之外的另一种颜色染色,如果染色失败,返回false返回染色成功。#include<cstring>#include<iostream&g.原创 2022-03-13 10:35:41 · 507 阅读 · 0 评论 -
拓扑排序 = 拓扑图 = 有向无环图
#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=100010;int n,m;int h[N],e[N],ne[N],idx;int q[N],d[N];void add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++;}bool topsort(){ ..原创 2022-03-10 08:48:49 · 171 阅读 · 0 评论 -
双端队列BFS:拖拉机
一个裸的双端队列广搜.#include <iostream>#include <cstring>#include <algorithm>#include <deque>#define x first#define y secondusing namespace std;typedef pair<int, int> PII;const int N = 1010;bool g[N][N], st[N][N];int di.原创 2022-03-09 08:32:11 · 137 阅读 · 0 评论 -
Flood-Fill: 使用DFS 使用BFS也可以
#include<iostream>#include<cstring>using namespace std;const int N=30;char g[N][N];int n,m,cnt;int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};void dfs(int x,int y){ g[x][y]='#'; cnt++; for(int i=0;i<4;i++) { int a.原创 2022-03-09 08:34:04 · 71 阅读 · 0 评论 -
双向BFS:字串变换
原题链接:https://www.acwing.com/problem/content/192/虽然至多只有6个规则,但是可能有很多种变换.比如abcabcabc, 你可以选择边第一个abc,也可以选择变第二个…我们可以让起点A和终点B 进行双向奔赴. 假设各走五步.搜索量大大减小.双向BFS搜的时候, 无论是A还是B,每次都要把一层扩展出来,不能每次只扩展一个点,否则结果有可能是错的.如果每次只扩展一个点,有可能存在以下情况,他们在某个点相遇了:然后搜索结束,然后我们就认为这是最短距原创 2022-03-09 08:33:03 · 123 阅读 · 0 评论 -
BFS求最短路:迷宫问题 求迷宫路径 逆向思维
#include<iostream>#include<cstring>#include<algorithm>#define x first#define y secondusing namespace std;typedef pair<int, int> PII;const int N=1010, M=N*N;int n;int g[N][N];PII q[M]; //模拟队列PII pre[N][N]; //标记前驱结点.原创 2022-03-08 09:24:04 · 166 阅读 · 0 评论 -
Flood Fill:山峰和山谷
说白了,分成三类:山峰,山谷,还有梯田。。。对于每个点,进行flood fill。记录周围有没有比他高的点或比较矮的点。一次bfs完之后,如果既有比他高的,也有比他矮的。那就是梯田咯,啥也不用干。如果没有比自己低的,自己就是山峰;如果没有比自己高的,自己就是山峰。#include<iostream>#include<cstring>#include<algorithm>#define x first#define y secondusing name.原创 2022-03-08 08:57:10 · 82 阅读 · 0 评论 -
Flood Fill:城堡问题
原题链接:https://www.acwing.com/problem/content/1100/由于对于每个点,使用了二进制表示,表示其上下左右的墙的情况。墙和非墙是不占用输入的,而且不用在单独建图!!只需要在BFS的时候判断能不能走就行。//墙和非墙是不占用输入的,而且不用在单独建图!!#include<iostream>#include<cstring>#include<algorithm>using namespace std;#define原创 2022-03-08 08:41:16 · 88 阅读 · 0 评论 -
Flood Fill:池塘计数
原题链接:https://www.acwing.com/problem/content/description/1099/如果这个点是池塘,并且没有被标记过。从这个点开始,进行 BFS。在BFS的时候,对每个点使用判重数组进行标记。每进行一次BFS,就把BFS能到达的点全部表记。遍历所有的点,统计一下一共BFS了多少次。//Flood fill 算法#include<cstring>#include<iostream>#include<algorith原创 2022-03-08 08:27:34 · 117 阅读 · 0 评论