
BFS
广度优先搜索
SYaoJun
这个作者很懒,什么都没留下…
展开
-
Prime Path【BFS】【POJ-3126】
分析题目链接:先预处理出10000以内的素数BFS搜索注意POJ的编译器比较老,C++11的语法会编译不通过。代码#include <iostream>#include <string>#include <cstdio>#include <algorithm>#include <cstdlib>#include <utility>#include <queue>using namespac原创 2022-02-19 12:27:45 · 381 阅读 · 0 评论 -
864. 二维数组区块计数
核心:主要是二维数据范围在10的6次方,所以如果直接申请二维空间,会超内存。所以要用一维数组来存,然后转换为二维数组对应的下标。由于C++栈空间默认是1M为了防止暴栈,可以用宽搜#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int...原创 2019-09-20 16:32:03 · 177 阅读 · 0 评论 -
994. 腐烂的橘子
解题思路判断最小时间,而且是二维矩阵,所以很容易想到用BFS。先记录一遍整个数组中有多少个新鲜橘子,当橘子都腐烂了或者某次BFS遍历时没有减少新鲜橘子的数量,遍历该结束了。最后判断一下是否还存在新鲜橘子,如果存在说明无法让所有橘子腐烂。注意点扩展腐烂橘子时,需要判断当前位置是否为新鲜橘子,如果是空白位置,则不能减少新鲜橘子的数量。class Solution {public: i...原创 2020-03-04 15:07:43 · 189 阅读 · 0 评论 -
7-10 Saving James Bond - Easy Version (25分)
借鉴代码注意临界值,如果007可以跳跃的长度与两个点之间的距离刚好相等,则也可以跳。这个代码对借鉴代码有点改进。#include <cstdio>#include <cmath>#include <iostream>#include <string>#include <vector>#include <cstring...原创 2019-12-06 11:47:40 · 213 阅读 · 0 评论 -
迷宫问题【POJ3984】
题目链接输出路径的BFSPOJ似乎不能使用C++11中的初始化方式pair类型的插入需要用make_pair(a, b)#include <iostream>#include <algorithm>#include <cstdio>#include <vector>#include <queue>using namesp...原创 2019-10-31 10:46:01 · 162 阅读 · 0 评论 -
1076. 迷宫问题
AcWing题目链接带有路径的最短路径BFS#include <iostream>#include <algorithm>#include <cstdio>#include <vector>#include <queue>using namespace std;typedef pair<int, int> PI...原创 2019-10-31 10:35:53 · 217 阅读 · 0 评论 -
1097. 池塘计数
AcWing题目链接Flood Fill经典题数据较小使用dfs,数据较大使用bfs#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;const int N = 1005;char g[N][N];in...原创 2019-10-31 09:52:38 · 286 阅读 · 0 评论 -
Lake Counting【POJ2386】
DescriptionDue to recent rains, water has pooled in various places in Farmer John’s field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square...原创 2019-04-27 20:27:27 · 211 阅读 · 0 评论 -
848. 有向图的拓扑序列
AcWing题目链接拓扑排序如果用数组模拟队列的话,可以直接输出拓扑序列注意队尾是从-1开始#include <iostream>#include <cstring>using namespace std;const int N = 1e5+5;int h[N], e[N], ne[N];int q[N], d[N]={0};int idx = 0;i...原创 2019-10-29 20:59:17 · 285 阅读 · 0 评论 -
847. 图中点的层次
AcWing题目链接BFS模板题用数组模拟队列#include <iostream>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int N = 1e5+5;const int M = 2e5+5;int h[N], ...原创 2019-10-29 20:28:43 · 235 阅读 · 0 评论 -
844. 走迷宫
AcWing题目链接BFS有个小剪枝,对于BFS第一次到达的点才操作,不然就终止。#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <queue>using namespace std;typedef pair&l...原创 2019-10-27 17:31:49 · 280 阅读 · 0 评论 -
7-36 社交网络图中结点的“重要性”计算 (30 分)
层次遍历BFS并查集判断#include <iostream>#include <cstdio>#include <algorithm>#include <queue>#include <vector>#include <cstring>using namespace std;const int N = 1e...原创 2019-10-20 14:34:44 · 581 阅读 · 0 评论 -
111. Minimum Depth of Binary Tree
使用宽搜,当搜到第一个叶子节点的时候,直接返回。但是注意仍旧要在最后面返回一个值,不然会报错。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : ...原创 2019-09-05 19:51:50 · 90 阅读 · 0 评论 -
164. 可达性统计
题目链接#include <iostream>#include <cstring>#include <vector>#include <queue>#include <bitset>#include <algorithm>using namespace std;const int N =3e4+7;int m...原创 2019-09-05 10:44:35 · 137 阅读 · 0 评论 -
7-4 List Leaves (25 分)
BFS树的宽搜由于每个点是依次编号的,所以可以用数学的方法统计没有出现的数据。树的BFS是从上到下的,和图不同,不需要标记。#include <iostream>#include <vector>#include <algorithm>#include <queue>using namespace std;const int N = ...原创 2019-09-02 19:20:59 · 196 阅读 · 0 评论 -
7-6 列出连通集 (25 分)
DFS深度优先搜索BFS广度优先搜索经典入门题邻接矩阵#include<cstdio>#include<cstring>#include<vector>#include<queue>using namespace std;int n,m;int G[12][12];int vis[12];void DFS(int x){ ...原创 2019-02-12 16:23:22 · 807 阅读 · 0 评论 -
1094 The Largest Generation (25 分)
方法1根据六度空间这道题改变而成,具体请参照六度空间题解注意:当n为1时需要特殊处理,后面的方法2和方法3不需要。#include<cstdio>#include<queue>#include<cstring>#include<vector>using namespace std;const int maxn = 105;int ...原创 2019-02-12 17:55:35 · 221 阅读 · 0 评论 -
1013 Battle Over Cities (25 分)
开始的时候题目理解错了题目是要求剩下的城市连通,所以需要当前城市屏蔽,然后计算剩余城市的连通分量,求得的结果减去1就是答案本题我使用的BFS处理#include<cstdio>#include<vector>#include<cstring>#include<queue>#include<algorithm>using n...原创 2019-02-13 15:41:05 · 308 阅读 · 0 评论 -
地鼠逃跑计划
入门级别的搜索题,但是我还是没搞出来,看了别人的才想到,我觉得很经典,所以放在这里,方便以后自己学习。地鼠逃跑计划#include<bits/stdc++.h> using namespace std;int m,n,x,y,k;//递归中不要用自减或自增 int dfs(int u,int v, int left_steps){ if(u<0||u>=m||...原创 2019-07-09 09:31:30 · 470 阅读 · 0 评论 -
走迷宫
走迷宫这分明是一道广搜的模板题,但是我却搞了好久才搞懂。最坑的地方:1.起始点变不变为阻塞的,无影响2.往四个方向搜索时,是满足条件再执行或者是不满足条件跳过,也无影响3.进入深搜时的位置需要变为阻塞,所以起点最好也设定为阻塞。4.不剪枝会超时,稍微剪一下就能过。DFS + 回溯#include<bits/stdc++.h> using namespace std;...原创 2019-07-10 09:40:36 · 107 阅读 · 0 评论 -
填涂颜色
填涂颜色解题思路大佬用的技巧是在矩阵的外围加了一圈,所以从左上角开始搜索时,始终能保持连通。这个很关键,也是精髓所在,比其他大佬用BFS写得代码更通俗易懂。#include<cstdio>#include<iostream>using namespace std;int A[33][33];//四个方向 int dx[4] = {1,-1,0,0};in...原创 2019-07-15 10:28:28 · 520 阅读 · 0 评论 -
L2-026 小字辈 (25 分)
题目链接这道题深搜广搜都可以,但是我最开始写的搜索只得了一分,可怜。深搜DFS #include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; vector<int> v[maxn],ans; int opt=-1; void dfs(int x, int now){ if(now &...原创 2019-07-20 07:49:34 · 702 阅读 · 0 评论 -
1076 Forwards on Weibo (30 分)
广度搜索BFS注意理解题意,关注者与被关注者的关系。同时L是表示,在L层以内的所有节点,包括L层。#include<bits/stdc++.h>using namespace std;const int maxn=1e4+5;vector<int> G[maxn];int vis[maxn]; int N,L,cnt;struct node{ int v...原创 2019-07-25 11:54:29 · 185 阅读 · 0 评论 -
1021 Deepest Root (25 分)
DFS似乎找到了PAT的一些规律,如果考的是数据结构里面的东西,就很少有坑。而如果考的模拟或者简单的题,就有很多边界条件。使用了两个全局变量,记录每个起点遍历的最大深度和所有顶点的最大深度。一次性AC,还是比较开心的!#include<cstdio>#include<vector>#include<cstring>using namespace ...原创 2019-02-13 18:09:31 · 544 阅读 · 0 评论 -
玛雅人的密码【清华大学】
题目描述玛雅人有一种密码,如果字符串中出现连续的2012四个数字就能解开密码。给一个长度为N的字符串,(2=<N<=13)该字符串中只含有0,1,2三种数字,问这个字符串要移位几次才能解开密码,每次只能移动相邻的两个数字。例如02120经过一次移位,可以得到20120,01220,02210,02102,其中20120符合要求,因此输出为1.如果无论移位多少次都解不开密码,输出-1...原创 2019-07-31 15:44:09 · 480 阅读 · 1 评论 -
1004 Counting Leaves (30 分)
判断树每层有多少个叶子节点#include<bits/stdc++.h>using namespace std;const int maxn = 105;int max_h=1;int leaf[maxn]={0};vector<int> G[maxn];void DFS(int index, int h){ max_h = max(h, max_h); ...原创 2019-02-10 19:54:56 · 303 阅读 · 0 评论 -
7-7 六度空间 (30 分)
BFS广度优先搜索方法一计算每层的深度,然后统计深度小于等于6的数量。#include<bits/stdc++.h>#include<queue>#include<vector>#define INF 0x3f3f3f3f using namespace std;const int maxn=10005;int vis[maxn];int d...原创 2019-02-12 14:48:46 · 770 阅读 · 0 评论