首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
POJ - 2251 bfs [kuangbin带你飞]专题一
】的更多相关文章
POJ - 2251 bfs [kuangbin带你飞]专题一
立体bfs,共有六个方向: const int dx[] = {0,0,1,-1,0,0}; const int dy[] = {1,-1,0,0,0,0}; const int dz[] = {0,0,0,0,1,-1}; AC代码 #include<cstdio> #include<cstring> #include<queue> using namespace std; const int maxn = 32; char G[maxn][maxn][maxn];…
POJ - 3414 bfs [kuangbin带你飞]专题一
状态搜索,每种状态下面共有六种选择,将搜索到的状态保存即可. d[i][j]表示状态A杯中水i升,B杯中水j升,总状态数量不会超过A杯的容量 * B杯的容量. AC代码 #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<string> #include<algorithm> #include<iostream> u…
POJ - 3984 bfs [kuangbin带你飞]专题一
bfs搜索过程中将路径保存下即可. AC代码 #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int maxn = 10; int G[maxn][maxn], d[maxn][maxn], pre[40]; const int dx[] = {1,-1,0,0}; const int dy[] = {0,0,-…
HDU - 3533 bfs [kuangbin带你飞]专题二
看了好久的样例才看懂. 题意:有一个人要从(0,0)走到(n,m),图中有k个碉堡,每个碉堡可以向某个固定的方向每隔t秒放一次炮,炮弹不能穿越另一个碉堡,会被阻挡.人在移动的过程中不会被炮弹打到,也就是说只有炮弹和人在某个整数时间待在同一个位置人才会被打死.问人能否到达(n,m). 思路:直接bfs即可,shot[t][x][y]表示在t时刻,是否有炮弹在(x,y)这个位置,可以预处理该数组. 注意: 1. 人不能穿越碉堡. 2. 炮弹每隔t秒发射一次,炮弹不能穿越其他碉堡. 3. 样例1中人必…
HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二
思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这种情况骑士会一直被传上传下. AC代码: 0ms #include<cstdio> #include<cmath> #include<cstring> #include<queue> using namespace std; const int maxn = 1…
UVA - 11624 多点bfs [kuangbin带你飞]专题一
题意:某人身陷火场,总有k个点着火,着火点可向四周扩散,问此人能否逃离. 思路:可能有多个着火点,以这些着火点作为起点进行bfs,得到整个火场的最短距离,然后又以人所在坐标作为起点进行bfs,得到该人到达火场各点的最短距离.枚举边界点,如果人到达某边界点的最短距离小于最短着火点到达的距离,则说明该点可以作为逃生的出口. 该题需要注意的地方: 1.可能没有着火点.我在这里WA了 2. 对于这种数据: 1 4 4 FFFF #### .J.# .... 答案: 2 但是我的AC代码对于这种情况无法得…
FZU - 2150 bfs [kuangbin带你飞]专题一
题意:两个人玩很变态的游戏,将一个草坪的某两个点点燃,点燃的草坪可以向上下左右四个方向扩散,问能否将整块草坪上面的草都点燃.如果能,输出最短时间(^_^他们就能玩更变态的游戏了),如果不能,输出-1. 思路:先求整个草坪的联通块数量cnt. 1.如果cnt大于2,一定不能点燃全图,输出-1 2.如果cnt等于2,分别在两个联通块枚举每个点中找最短时间,最后答案就是max(time1, time2) 3.如果cnt等于1,此题的关键点.枚举两个点作为bfs的两个起点,注意是两个起点,bfs求在这个…
HDU - 2612 bfs [kuangbin带你飞]专题一
分别以两个人的家作为起点,bfs求得到每个KFC最短距离.然后枚举每个KFC,求得时间之和的最小值即可. 此题不符合实际情况之处: 通过了一个KFC再去另一个KFC可以吗? 出题人都没好好想过吗? AC代码 #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int maxn = 200 + 5; int d[2]…
HDU - 1495 bfs [kuangbin带你飞]专题一
模拟倒水的过程,每次可以把第i个杯子的水向第j个杯子里面倒,这可能出现新的状态,不停的更新状态,指导某两个杯子的水等于S/2说明找到答案,如果所有状态搜索完毕仍然不能均分,则退出. 注意:如果S是奇数,一定不能均分,因为所有杯子的体积都是整数,不可能倒出有小数的水. AC代码 #include<cstdio> #include<queue> #include<cstring> #include<algorithm> using namespace std;…
POJ - 3087 模拟 [kuangbin带你飞]专题一
模拟洗牌的过程,合并两堆拍的方式:使先取s2,再取s1:分离成两堆的方式:下面C张放到s1,上面C张到s2.当前牌型与第一次相同时,说明不能搜索到答案. AC代码 #include<cstdio> #include<cstring> const int maxn = 100 + 5; char s1[maxn], s2[maxn], s3[maxn * 2], s4[maxn * 2], vis[maxn * 2]; int c; void deal(char *a){ int c…