
bfs
99度灰
这个作者很懒,什么都没留下…
展开
-
UVA 208 - Firetruck
题目大意:输出从1走到n的所有方式。给出了不同数字之间存在道路可以走,给的数字可能超过n。解题思路:dfs+bfs。单独用dfs来找路的话会超时,需要bfs来剪枝。剪纸的方式为,从n开始找所有连通的标记一下。题目样例给的格式是假的。。。其实路径的一行之间输,每两个号之间一个空格。ac代码:#include #include #include using namespace原创 2017-09-06 15:58:01 · 278 阅读 · 0 评论 -
UVA 10557 - XYZZY
题目大意:有n个房间,房间编号从1~n,每个房间都有能量,以及下一步到达的房间,一个人从1号房间出发,初始能量为100,到达每个房间,得到其中的能量,重复到达可重复获得能量。要到达n号房间,可能吗?其中能量始终大于0。解题思路:bfs,并限制一个能量上限,不然可能会死循环tle。看了陈帆的题解。ac代码:#include #include #include usi原创 2017-09-06 15:41:37 · 698 阅读 · 0 评论 -
CodeForces 121A - Lucky Sum
题目大意:输入一个范围,在范围内取几个区间,区间内的所有数当区间分界来计算,所有区间分界都是由4或7组成的。例:2~7 分界为 4, 7。则2~4当作4计算,5~7当作7计算,结果为33。解题思路:打表将所有区间分界按大小顺序存入数组,然后在范围内判断,先搜素第一个区间分界的位置,则从开头到第一个区间分界都为区间分界的值。如果一次一次加会超时。所有在这一个的区间分界不够大时,计算并将区间原创 2017-09-06 15:13:59 · 505 阅读 · 0 评论 -
UVA 10047 - The Monocycle
题目大意:走迷宫从S走到T,初始时,车头向北(四个方向),车轮为绿色(五种颜色),每次只可以左右转,转一次一秒,行进一步一秒。每走一步,轮子变色。要求到达T最短时间且轮子为绿色。解题思路:用四维标记数组代表位置,颜色,方向。bfs求解。队列每次一种状态,每次将左右转状态转入队。每次前进方向与车头方向一致。ac代码:#include #include #include u原创 2017-09-06 14:54:52 · 301 阅读 · 0 评论 -
UVA 11234 - Expressions
题目大意:将在栈里的存储方式,转换成在队列里的存储,也就是输入二叉树的先序遍历,输出二叉树的层次遍历的逆。解题思路:先用栈构建二叉树,碰到小写字母(小写字母的位置入栈),建树(叶子节点)。碰到大写字母时,出栈两个(其左右节点的位置),建树,大写字母的位置入栈。建完树以后,遍历一次,逆写入字符串。最后输出就可以了。ac代码:#include #include #includ原创 2017-09-06 09:26:45 · 305 阅读 · 0 评论 -
UVA 657 - The die is cast
题目大意:每一块由'*'和’X‘组成的算骰子的一个面,其中X代表点数1,如果有连在一起的X算一起算点数1,有些类似油田问题的计数方式。计算各个面的点数,排序输出。解题思路:先将所有’*‘或'X'标记,然后bfs遍历,其中遍历到X时,dfs将连着一起的‘X’变为‘*’(这样就不会因为进入dfs标记为访问过后,在bfs里没法遍历整面)。最后输出。ac代码:#include #in原创 2017-09-06 09:19:07 · 249 阅读 · 0 评论 -
UVA 816 - Abbott‘s Revenge
题目大意:走迷宫,最多为九宫格,每个位置进入时的方向不同,可以选择的出位置方向不同(向前F,向左L,向右R),根据输入情况而定。输入入口,方向(NWSW),出口,接下来输入不同位置的进入方向和对应的出位置方向。求入口到出口的最短路径。解题思路:某学长说的好,如果错了。。。那就重新在做一次。一个结构体用与记录路径(方向用数字代替),标记数组三维,x,y,和方向。一个结构体用于记录不同位置进入原创 2017-09-06 09:17:47 · 334 阅读 · 0 评论 -
POJ 3414 - Pots
题目大意:有容积为A,B大小的罐子,需要得到C的水,可以通过6种操作获得,最少需要几步,怎么做。如果不能则输出impossible。解题思路:感觉有点像非常可乐和迷宫问题结合。就是既要考虑倒水,也要保存路径,综合一下就可以了,只是比较麻烦一些。ac代码:#include #include #include using namespace std;struct pour{原创 2017-09-04 19:27:57 · 252 阅读 · 0 评论 -
UVA 784 - Maze Exploration
题目大意:给一个图形,每个图形中用字母分为一块一块,如果一块中有‘*’,即该块内容都填补为‘#’。每个图形下面有下划线作为分割,输出时也要有。解题思路:类似迷宫问题,将所有‘*’号读入队列,并转化字符。然后bfs。(不看题目坑死人。。。)ac代码:#include #include #include using namespace std;queue int>qu;i原创 2017-09-04 19:25:21 · 275 阅读 · 0 评论 -
UVA 11624 - Fire!
题目大意:J在着火的迷宫中,他每次能移动一步,火每次四周蔓延,人和或都不能到障碍物处。问他能否逃脱,逃脱的步数。解题思路:刚开始是只有一个人的bfs,火的蔓延根据人的步数,每次计算,结果就tle了。后面看了题解的思路,bfs人和火,如果一个位置火比人早到或同时到,则,这点直接continue。因为可能有很多把火所以与人走迷宫的区别在于,当这点没走过或是,走过的步数比将要走到的步数长就替换。原创 2017-09-04 19:24:27 · 319 阅读 · 0 评论 -
HDU 2612 - Find a way
题目大意:Y和M要到同一家KCF碰面,每一步要走11分钟,’#‘为障碍物,’@‘为KCF。问两人到同一家KCF总时长最短要多久。解题思路:与迷宫问题类似,只是要两个人走,将所有KCF位置读入结构体。读取两个人的位置,两次bfs求出分别到能到的所有KCF的步数。最后找出最小的总步数。ac代码:#include #include #include using namespac原创 2017-09-04 19:20:53 · 287 阅读 · 0 评论 -
UVA 572 - Oil Deposits
题目大意:找油藏,‘@’为油田,油田的八个方向如果没有油田的话,算一片油藏,如果有油田,则多个油田为同一片油藏,并且每个油田都要往八个方向继续判断是否有油田来确认这片油藏有多大。解题思路:感觉跟迷宫问题有些不同,但我还是用bfs,先将所有的油田坐标扔到队列里,非油田坐标直接标记为已走过,bfs每次将队列坐标读出,如果该油田坐标未标记为已走过,则进入自己写的一个油藏大小的简单递归中,递归中会原创 2017-09-03 18:17:03 · 262 阅读 · 0 评论 -
HDU 1495 - 非常可乐
题目大意:中文题。。。三个整数 : S 可乐的体积 , N 和 M是两个杯子的容量,以"0 0 0"结束。如果能平分的话请输出最少要倒的次数,否则输出"NO"。解题思路:用vis三维表示三个瓶子中的状态,六种倒水方式,A->B,A->C,B->C,C->B,C->A,B->A。bfs。标记数组也是步数数组,如果刚开始大杯为奇数,则直接NO。ac代码:#include #inc原创 2017-09-03 18:16:13 · 360 阅读 · 0 评论 -
UVA 1600 - Patrol Robot
题目大意:走迷宫,0可以走,1为障碍物,每个样例提供迷宫的长宽,以及可以连续穿的障碍物数。求左上角到右下角最小步数。左上角和右下角都为0。解题思路:查了题解,标记数组多一维作为连续穿的障碍物数,这样相同的位置就会可以bfs多次了,只要不超过限制,不同障碍物数都可以存着。注意这点就跟迷宫问题一样了,多了几个变量要处理。查的题解的步数是另外存的,自己重新打了,修改到标记数组也是步数数组。原创 2017-09-03 18:15:25 · 303 阅读 · 0 评论 -
UVA 532 - Dungeon Master
题目大意:3D迷宫,’#‘为障碍物,’.‘为可行,’S‘为起点,’E‘为终点,求最短路径。解题思路:bfs与迷宫问题类似,只是多一维,起点,终点坐标自己求一下。标记数组依然是步数数组。只要不混了,没什么难点。ac代码:#include #include #include using namespace std;struct node{ int x; int y;原创 2017-09-03 18:14:17 · 275 阅读 · 0 评论 -
POJ 3984 - 迷宫问题
题目大意:中文题。。。定义一个二维数组:它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。解题思路:建立一个模拟队列的结构体,其中包括x,y,pre。pre用于存储前一步的位置(结构体数组的位)。全局变量,标记数组,头尾位置。bfs先将起点读入,pre为-1。然后循环将起点上下左右判断是否能移动,能移动存入结构体原创 2017-09-03 18:11:22 · 417 阅读 · 0 评论 -
UVA 12101 - Prime Path
题目大意:有一个素数,变化成另一个素数,至少要几步,每一步,只能变化一位数字,必须变化后的数字也是素数。解题思路:打表将所有素数找出来,用bfs一步一步搜索。与抓牛类似,一个标记数组,即标记,也是记录步数,第一次找到就返回步数的值。抓牛有详细谈过,这里就不说了。ac代码:#include #include #include using namespace std;int原创 2017-09-03 18:09:52 · 420 阅读 · 0 评论