图论 BFS
文章平均质量分 67
BFS
柏油
不负冬日春晓 不负青春韶华
展开
-
POJ3984 迷宫问题(BFS)
#include#include#include#includeusing namespace std;//0表示可以通过,1表示墙无法通过 struct note{int x,y;note(){}note (int x,int y){this->x=x;this->y=y;}const bool operator==(const原创 2016-11-14 22:43:16 · 256 阅读 · 0 评论 -
POJ 3087 Shuffle'm Up(BFS +模拟)
题意:给定长度都为C两个字符串,S1,S2,和一个要求的结果字符串S12。先把 S2 的最下面一张牌放在最下面,然后S1,S2交错的叠放,得到新的S12,再把S12最下面的C个字符赋值给S1,把剩下的赋值给S2,再次重复上面的过程。最后求出要得到目标字符串S,问最少需要几步。#include#include#include#include#includeusing namespace原创 2017-02-15 11:55:12 · 232 阅读 · 0 评论 -
POJ 3414 Pots(模拟bfs+路径记录)
题意:给出两个容积分别为 a 和 b 的pot,按照以下三种操作方式,求出能否在一定步数后,使者两个pot的其中一个的水量为c。 1.FILL(i):将i pot倒满水。 2.DROP(i):将i pot倒空水。 3.POUR(i,j): 将i pot的水倒到j pot上,直至要么i pot为空,要么j pot为满。思路:bfs求解,六种状态,并记录路径原创 2017-02-15 16:05:29 · 327 阅读 · 0 评论 -
FZU 2150 Fire Game(双端bfs搜索)
题意:给你块地,有空地,也有草堆,让你选两个草堆进行点火,燃烧的草堆会引燃上下左右的相邻草堆,每一次引燃花费1s时间,问你最少花多长时间把草堆都点着,如果做不到输出-1.思路:每次枚举两块草坪,两端同时bfs(也就是说一开始加入两个节点到队列当中,和以前的类型一个道理没什么区别),用变量count1计算草坪个数,当count1减小到0时,即找到了本次枚举的解,并在节点node中设置一变量为c记原创 2017-02-15 23:37:30 · 608 阅读 · 0 评论 -
蓝桥杯 算法提高 学霸的迷宫 (bfs+路径记录)
算法提高 学霸的迷宫 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗。但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫。因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线。原创 2017-03-11 23:31:29 · 502 阅读 · 0 评论 -
CDOJ (UESTC) 851 方老师与素数(bfs)
方老师与素数 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)方老师最近很喜欢素数,他想玩一个游戏:现在有两个4位的素数n和m,你一次可以改变n的一位数字,并且改变过后的新数字必须也是个素数,并且也不能有前导0。请问使n变为m原创 2017-03-24 18:21:09 · 385 阅读 · 0 评论 -
CDOJ(UESTC) 149 解救小Q(bfs中涉及传送带的问题)
解救小Q Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她。迷宫里面有一些陷阱,一旦走到陷阱里,就会被困身亡:(,迷宫里还有一些古老的传送阵,一旦走到传送阵上,会强制被传送到传送阵的原创 2017-03-25 11:16:02 · 1193 阅读 · 0 评论 -
nyoj 58 最少步数 (bfs)
最少步数时间限制:3000 ms | 内存限制:65535 KB难度:4描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,0,1,原创 2017-04-05 22:22:10 · 297 阅读 · 0 评论 -
HDU 1548 A strange lift (简单bfs)
A strange liftProblem DescriptionThere is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 <= Ki <= N) on every floor.The lift have just two buttons: u原创 2017-04-18 22:36:24 · 293 阅读 · 0 评论 -
uva 1599 Ideal Path (两次bfs)
分析:两次bfs,第一次从n到1逆着来,找到每一个点对应的d[]值。第二次从1出发,走的每一步要满足d[u]==d[v]+1,如果满足这个的时,有多个选择,则选择最小的color值走,一直走到最后即可。AC代码:#include#include#include#include#include#define INF 2000000000using namespace std;原创 2017-05-15 16:02:22 · 412 阅读 · 0 评论 -
计蒜客 无脑博士的试管们 (bfs+模拟)
无脑博士有三个容量分别是 A,B,C 升的试管,A,B,CA,B,C 分别是三个从 1 到 20 的整数,最初,A 和 B 试管都是空的,而 C 试管是装满硫酸铜溶液的。有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直到被灌试管装满或原试管空了。当然每一次灌注都是完全的。由于无脑博士天天这么折腾,早已熟练,溶液在倒的过程中不会有丢失。写一个程序去帮助无脑博士找出原创 2017-05-20 11:36:47 · 808 阅读 · 0 评论 -
计蒜客 迷宫 (bfs)
已知一个 n 行 m 列的上下左右四联通的迷宫,其中字符 'Y' 表示起点,字符 'C' 表示终点,在途中只有一个起点和终点,字符 '*' 表示可通过的收费站,每通过一次需要花费 x 元,字符 '#' 表示不可通过的点,字符 'P' 表示地道的出入口,在迷宫中所有的地道出入口都是联通的,并且通过地道不需要任何费用。求从起点到终点的最小花费。输入格式输入包含多组测试数据 ( 不超过5原创 2017-05-21 16:06:20 · 852 阅读 · 1 评论 -
HDU 1728 逃离迷宫(BFS+转弯次数+转弯方向)
新生赛(点击红色的Registerring)逃离迷宫Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 29797 Accepted Submission(s): 7313Problem原创 2017-11-21 14:44:09 · 458 阅读 · 0 评论 -
POJ 3126 Prime Path(BFS + 素数判定)
题意:给定两个四位素数作为终点和起点,每次可以改变起点数的某一位,且改变后的数仍然是素数,如果变换成终点数字输出最短步数,否则输出Impossible。#include#include#include#includeusing namespace std;const int maxn=1e4+10;int d[maxn];int n,m;int a[4];bool is_pr原创 2017-02-15 10:23:21 · 223 阅读 · 0 评论 -
POJ 3278 Catch That Cow(简单BFS + 动态方向的设置)
RE了三次,原因是数组越界,解决方法是1、把数组开大些(边界判断条件(1e5)的两倍以上) 2、把数组判断d[v]放在边界判断之后 。 AC代码如下:#include#include#includeusing namespace std;const int maxn=1e5+10;int d[maxn];int N,K;int dir[]={-1,1,N};void bfs原创 2017-02-14 10:33:40 · 269 阅读 · 0 评论 -
POJ 2251 Dungeon Master(简单BFS)
三维立体型迷宫 ,输入是一层一层向上。#include#include#includeusing namespace std;const int maxn=30+2;struct node{ int x,y,z; node(int x=0,int y=0,int z=0):x(x),y(y),z(z){}}ns,nt;char g[maxn][maxn][maxn];int d原创 2017-02-14 09:34:06 · 224 阅读 · 0 评论 -
Trees on the level 树的层次遍历 UVA 122(BFS)
#include#include#include#includeusing namespace std;const int maxn=260;struct node{ bool have_value; //判断是否被付了值 int value; //结点值 node*left,*right; //左右子结点原创 2017-01-08 15:36:38 · 340 阅读 · 0 评论 -
HDU 1242 Rescue (BFS + 优先队列)
#include#include#includeusing namespace std;const int maxn=200+10;char p[maxn][maxn];int d[maxn][maxn];struct node{ int x,y; node(int x1=0,int y1=0):x(x1),y(y1){} bool operator<(const node &原创 2017-01-14 20:53:20 · 287 阅读 · 0 评论 -
Abbott's Revenge UVA 816(图 BFS)
题目大意:有一个 9 * 9 的交叉点的迷宫。 输入起点, 离开起点时的朝向和终点, 求最短路(多解时任意一个输出即可)。进入一个交叉点的方向(用NEWS表示不同方向)不同时, 允许出去的方向也不相同。 例如:1 2 WLF NR ER * 表示如果 进去时朝W(左), 可以 左转(L)或直行(F), 如果 朝N只能右转(R) 如果朝E也只能右转。* 表示这原创 2017-01-11 09:41:59 · 357 阅读 · 0 评论 -
HDU杭电 1253 胜利大逃亡(图 BFS)
本题难度并不大,一个普通的用BFS求解的题,值得注意的是数据的输入(三维数据输入被绕了几圈);还有就是最后的出口可以表示墙,无法出去(就是没考虑到这点WA了一次);剩下的就是BFS的常规思路及框架了。#include#include#include#includeusing namespace std;const int len=50+10;int K,A,B,C,T;stru原创 2017-01-11 19:32:18 · 353 阅读 · 0 评论 -
广度优先搜索( 图 BFS)练手题
追赶妖怪Description一身正气的钟馗四处降妖,一天他发现一只狐妖正在祸害百姓,他连忙追赶上去准备除妖,可是狐妖很聪明,她自知敌不过钟馗,便逃入山林,企图消耗钟馗的体力。钟馗在树林里面可以自由移动,而且他有一个法术:可以从当前坐标(x,y)直接移动到(2x,2y)的位置。钟馗为了不枉送性命,找到人称"人间诸葛亮"的你,希望你能帮他判断他能否在体力未耗尽到达狐妖的藏匿地点(如果原创 2017-01-11 10:22:01 · 2140 阅读 · 1 评论 -
UVA 11624 Fire(bfs + 多起点)
题意:给1个n*m的网格,上面有的点能走,有的点不能走(墙),然后有的点是火源,火源和人一样,每次都是上下左右四个方向蔓延,速度一样是1,火也不可以从墙上跨过去,给你人的起点,终点是只要走到边界就行,就是走出矩阵,问你最小逃生时间。思路:需要注意一点是,火源不止一个;首先将所有火结点加入容器(vector),调用bfs时先将火结点加入队列,其他的和普通bfs就没什么区别了。AC代码如下:原创 2017-02-16 22:56:55 · 319 阅读 · 0 评论 -
HDU 2102 A 计划(bfs)
刚开始没注意到起点已经给定(0,0,0),还自己通过S去找到起点的坐标;#include#include#includeusing namespace std;const int maxn=10+2;struct node{ int x,y,z; node(int x=0,int y=0,int z=0):x(x),y(y),z(z){}}ne;char g[maxn][ma原创 2017-02-17 11:00:35 · 178 阅读 · 0 评论 -
nyoj 逃离妖洞 1246(BFS)
逃离妖洞时间限制:1000 ms | 内存限制:65535 KB难度:3描述唐僧不小心又掉入妖怪的迷宫了。这个迷宫有n行m列,共n*m个方格。有的方格是空的,唐僧可以站在上面,有些是有障碍物的不能站。每次唐僧可以移动到相邻的8个空方格上。但是有些情况不能移动,即从两个方格的缝隙中移动,如图:为了逃出妖怪的洞穴,唐僧需要触发悟空在某个方格留下的宝物原创 2017-02-10 11:25:06 · 296 阅读 · 0 评论 -
UVA 439 骑士(Knight Moves ) 很基础的BFS
#include#include#includeusing namespace std;const int maxn=8+2; struct node{ int x,y; node(int x=0,int y=0):x(x),y(y){}};node ns,nt;int d[maxn][maxn];int dir[][2]={{1,2},{-1,2},{-2,1},{-2,-原创 2017-02-10 12:53:14 · 273 阅读 · 0 评论 -
HDU 3533 Escape (bfs + 预处理 + 剪枝)
题意:有一个人要从(0,0)走到(n,m),图中有k个碉堡,每个碉堡可以向某个固定的方向每隔t秒放一次炮,炮弹不能穿越另一个碉堡,会被阻挡。人在移动的过程中不会被炮弹打到,比如说一个碉堡(0,0)的子弹速度3格每秒,同一时间人到了(0,3)这点,会被打死,而(0,2)则不会,问人能否到达(n,m)。思路:本题关键就是先预处理每个时刻那些位置会有子弹,用remb[time][x][y]来记录,并原创 2017-02-19 12:55:30 · 416 阅读 · 0 评论 -
UVA 1600 Patrol Robot 巡逻机器人(BFS)
需要注意的一点是:障碍物可以访问多次(因为当访问此障碍物时,当前路径穿过的连续障碍物次数大于或小于以前的路径也可以访问该点(也许以前的路径并不能走到终点))#include#include#includeusing namespace std;const int maxn=20+2;struct node{ int x,y,obs; //obs 表示当前连续穿过的障碍原创 2017-02-11 09:55:51 · 403 阅读 · 0 评论 -
HDU 1495 非常可乐(BFS + 模拟)
思路:bfs求解,对每一个状态的S,N,M,有六种方式倒水(S->N,S->M;N->S,N->M;M->S,M->N),当三个杯子当中任意两个杯子装水等于S/2时,即为解。在进行六种方式循环时,需要从倒水的杯子(剩水量a[i])和将倒入水的杯子中(还可以装多少水cup[j]-a[j])选择最小的一个min1,然后a[i]-=min1;a[j]+=min1;满足条件时加入队列。S为奇数时一定不原创 2017-02-13 18:26:32 · 521 阅读 · 0 评论 -
nyoj 21 三个水杯 (模拟bfs)
三个水杯时间限制:1000 ms | 内存限制:65535 KB难度:4描述给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。输入第一行一个整数N(0接下来每组测试数据有两行,第一行给出三个整原创 2018-01-24 20:22:04 · 279 阅读 · 0 评论