
算法之广度优先搜索(bfs)
code_mryxj
这个作者很懒,什么都没留下…
展开
-
Leetcode 1345. 跳跃游戏 IV
Leetcode 1345. 跳跃游戏 IV题意:给一个一维的数组,你从下标0开始出发,有三种操作:每次可以向左,右移动一位,或者移动到与自己数值相同的位置。思路:这类搜索求最短步数的解法是典型的bfs,注意这题数据的特殊性,裸bfs会超时。这是因为第三个操作枚举所有相同数值的位置时候,如果出现很多相同值的数值,时间复杂度会近似O(n)。这一步枚举,可以把连续出现相同值的区间只保留左...原创 2020-02-15 22:10:51 · 542 阅读 · 0 评论 -
poj1426(bfs dfs)
对于一个整数,问大于等于这个整数的一个整数能够被其整除的整数,且这个整数只能包括0和1解题思路:看了有些大神做法,取模神马的好复杂,其实可以直接从前往后两个方向的深搜就可以搜到。#include<cstdio>#include<algorithm>long long n,DEP;long long s;bool flag;void dfs(long long i,int step){原创 2015-05-15 10:39:48 · 520 阅读 · 0 评论 -
uva10603 Fill
题意:给你三个杯子容量,a,b,c和目标d,起初a,b,都是空的,c是满的,三个杯子随意倾倒,问最少的倒水量是一个杯子水的容量满足d,如果没有满足d的情况,输出最接近d的最少倒水量。 思路: 这里 水的容量范围是200,枚举所有状态 不会超过201^2=40401,所以这里可以直接广搜一边,但是注意这里求得是倒水量的最少,不是最少步数,就需要借助一个优先队列对水量少状态的优先。#include原创 2016-03-17 23:58:02 · 468 阅读 · 0 评论 -
uva1600 Patrol Robot
题意:每个机器人有一个连续穿越k道墙的属性,然后这里走过的点可能会重复路过,对于每个点需要加一个属性,第几次穿墙路过此地。所以这题标记数组是三维的,其他就是广搜模板。#include<bits/stdc++.h>#define rep(i,a,n) for (int i=a;i<n;i++)#define per(i,a,n) for (int i=n-1;i>=a;i--)#define p原创 2016-03-03 16:19:06 · 392 阅读 · 0 评论 -
uva439 Knight Moves
广搜 模板题#include<bits/stdc++.h>using namespace std;queue<pair<int,int> >que;int sx,sy,mx,my;int nxt[8][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{1,-2},{2,-1}},v[10][10];int main(){ char a[1原创 2016-03-03 16:11:57 · 407 阅读 · 0 评论 -
uva816 Abbott's Revenge(bfs 模拟代码题)
锻炼打代码的能力....#includeconst int inf=0x7fffffff;using namespace std;struct Node{ int x,y,dir;};int dir;int has_edge[10][10][5][4],d[10][10][5],r0,r1,r2,c0,c1,c2;Node p[10][10][5];const char*原创 2016-01-18 22:41:22 · 888 阅读 · 0 评论 -
FZU 2150
前言:邝斌搜索专题遗留题 题意:‘#’ 表示草’.’ 表示空地,火烧草每一秒向四周蔓延,不能跨过空地,同时从图上两个地方点火,问最小需要多少时间烧完,不能烧完输出-1. 数据,刚好合适枚举任意两个点,广度搜索。 别的没什么特别。#include <fstream>#include <iostream>#include <string>#include <complex>#include原创 2015-12-12 15:45:27 · 183 阅读 · 0 评论 -
hdu1072(bfs搜索退出的条件有变)
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;struct node{ int x,y,step,time;};int M[10][10],book[10][10],sx,sy,Next[4][2]={{-1,0},{0,1},{1,0},{0,-1}原创 2015-07-20 00:04:03 · 468 阅读 · 0 评论 -
poj3414(用bfs模拟并回溯)
(好好写结题报告)题意:给送三个杯子大小,前两个杯子可以进行六个操作,倒满,泼掉,一个杯子到另一个杯子。问最少步骤使前两个杯子存在的水是最后一个杯子的容量。 不明思议,用广搜操这个六个方向搜索,知道搜到,有两个难点,一个是搜索完后需要输出路径,目前只会比较熟练用回溯,用一个元素记载每一个状态上一个状态在数组的位置(所以这里用结构体数组做,而不是因为我不知道这个怎么回溯。。。还有一个难点就是。。。妈原创 2015-06-14 21:30:50 · 598 阅读 · 0 评论 -
Hdu1242(bfs+优先队列or dfs)
题意:和最普通迷宫类问题差别在于,他的路上会有x,这个x会让他多停留一秒,而用用最基础的宽度搜索,永远搜的是地图上最短的路径,而忽略x的加成,如果那条最短的路上有很多x,加起来比远的没有x的路时间长多了。 所以,开始我就wrong了很多次,(果然太弱了),后来想啊,用广搜把每条都去的地方扫一下,选个时间最短的就好了,结果。。。。案例怎么广搜都只能扫出一条,别的自己想数据的也扫不全。。。后来想啊想。原创 2015-07-13 10:30:48 · 574 阅读 · 0 评论 -
Hdu5012(bfs)
不容易看出来的搜索类题目,求达到满足题意的最短的步数,很明显的广搜做最优。 题意:一个正方体每个面代表一个数字1~6,按顺序上下左右前后,四种翻转方式,问最少经过多少次翻转能到达目标状态,不能到达就输出-1. 这题难点,在于每个状态的表示,和转换方式,和判断方法,好的代码可以简略又清晰,差的代码就如我般臃肿又难懂。。。太弱了#include<iostream>#include<cstdio>原创 2015-07-13 00:59:52 · 551 阅读 · 0 评论 -
poj2251(bfs坑爹的领悟)
真么想到这么基础一道题 给我了这么多坑爹的领悟。。。 1.坑爹的是竟然把这题目分类在了深搜里面,然后我就屁颠屁颠深搜,妈蛋TLE,后来总结迷宫类问题果断bfs简单多了,dfs还有TLE的风险,一不小心就递归的超时。 2.坑爹队列的结构体数组开小了,wrong的我不想做其他题了。(细心,或者用STL里面队列)。 3.还有一点就是,字符串输入的问题,以后都用scanf(“%s”,…)读,考虑一个一原创 2015-05-23 23:32:55 · 661 阅读 · 0 评论 -
poj3026(bfs+prime)
ACM博客_kuangbin 新博客kuangbin.net 人一我百,人十我万!追逐青春的梦想,怀着自信的心,永不放弃! by kuangbin 新博客 kuangbin.net POJ 3026 Borg Maze(bfs+最小生成树) Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6原创 2015-06-01 20:34:46 · 765 阅读 · 0 评论 -
poj3126(bfs)
码力 太差。。。开始 用int数组 存 字符串 用dfs乱搞。。。没搞出来。。。看了别的 用string 随便一下bfs就出来了。。ym 对于这种 输出最短的条件 就是明显bfs。。。果然别人的题解 就是代码精炼 优雅 还学习 了新东西 pair<>代替结构体。方法:1.建立一个队列,队列中的元素由string和int构成,string表示当前串,int表示从初始串到当前串的最小转变步数。 2.原创 2015-05-29 11:40:54 · 424 阅读 · 0 评论 -
poj3278(bfs)
初看这题,不就是搜索找符合条件的数 嘛,easy,来dfs搞一下 ,然后见陷入TLE 。。。妈蛋 。。忘了 这种找满足条件的东西的时候最好用bfs的规律。 好在用刚学会pair搞,,,数组开小。。。没有剪枝 ,,,又陷入RE。。TLE 的循环中。。搞了很久 终于AC 。。我真的太炸了 水题都能卡。。#include<cstdio>#include<cstring>#include<queue>原创 2015-06-01 14:26:17 · 431 阅读 · 0 评论 -
POJ 3984(bfs)
这题求搜索的最短路径,如果只是输出步数,我觉得bfs,dfs都可以,但是它要输出路径,我想了想bfs如果每次都存下每次搜索后的路径,再比较,或是先假设存的是最短的路径,再比较,都有点麻烦,用bfs找到后,不就是现成最短路径吗? 还有一个问题 是这个路径怎么输出,有的算法书,特地在结构体加一个变量记录每次下一个节点存它的父亲,我就想怎么正序输出了?都是反过来的啊。。。。后来看了别人的题解 原来是 递原创 2015-05-18 01:32:42 · 590 阅读 · 0 评论 -
hdu1495(非常可乐 dfs)
题目链接 这题题意真让我想到小时候做过的脑筋急转弯,讲的是给你三个杯子,第一个杯子大小是后两个杯子大小之和,且第一个杯子开始是满的,其他两个是空的,问你经过多少次倒来倒去,能够是两个杯子里一样多平分最初可乐总量也就是第一个杯子的大小,不能就输出NO。 开始真的没有思路,联想了一点,如果杯子大小是奇数,肯定就不能倒出来,因为杯子大小都是整数不能倒出0.5出来吧。 后来看了别人题解。。。(果然题做原创 2015-05-26 22:43:08 · 1094 阅读 · 0 评论