优先队列
煦--晨
菜鸟起飞
展开
-
hdu(2575)Ocean Currents
题目大意: 一只小船在水中行走,想要到达目的地,然后有八个方向,用0 …… 7表示,分别是北,东北,东,东南……,而它在任何一点都有一个方向,而当它的下一步走的方向跟它此刻自己的顺风方向相同的时候(即下一步的方向跟它的数字相同),走这一步不需要耗费能量,否则耗费的能量为1个单位能量。然后要求这只小船到达目的地所需的最小能量。解题思路: 一下来就感觉其实实现原创 2013-07-30 12:38:29 · 684 阅读 · 0 评论 -
hdu(1372) Knight Moves
当年的难题,现在用队列是如此的容易;不多说;#include"stdio.h"#include"string.h"int visit[10][10];int dir[8][2]={-2,1, -1,2, 2,1, 1,2, 2,-1, 1,-2, -2,-1, -1,-2};int sx,sy,ex,ey;#include"queue"using nam原创 2013-08-24 18:48:29 · 474 阅读 · 0 评论 -
hdu(1254)推箱子
//题目意思很简单,但要拿下这道题必须明白以下几点;//一;一个木块要想推动它,必须要保证他的前后都必须是道路;//二;用一个dfs来搜索,是否能从人的位置,到达人将要推木块的位置,也就是木块的后方;其中人不能从此时木块的位置经过;//三;用bfs神搜的过程中,为了防止超时,要将小的入队,这也是引入dp的原因;dp【I】【j】【k】表示从k方向推到(i,j)的最小格数;//四,在b原创 2013-08-24 12:22:14 · 617 阅读 · 0 评论 -
hdu(1195) Open the Lock
唉,花费了一上午才给搞出来;代码有点长,但很好理解;出错的原因;一;每次操作之前都要更新:cur=next;(重要)二;标记visit用四维,用两维吼不住;三;输入格式是用字符输入,在转化为数字,直接输入数字会把它当做一个数。 #include"stdio.h"#include"string.h"#include"queue"using namespa原创 2013-08-25 11:28:54 · 660 阅读 · 0 评论 -
hdu (1072) Nightmare
很简单的一道题;对于这道题一出错的地方在于,如何让标记;因为由于要延长炸弹的时间而使得一些地方重复走;不标记的话无法结束,但要想步数最少,那么4位置一定只能走一次;所以对值是4位置进行标记就可以了;#include"stdio.h"#include"string.h"#include"queue"using namespace std;int map[100原创 2013-08-25 17:01:24 · 535 阅读 · 0 评论 -
hdu(1429) 胜利大逃亡(续) 队列+bfs+状态压缩
/*本题用到状态压缩,这个还真没想到,想到了也不会。。得好好学学状态压缩了;本题要采用|运算来模拟拾取钥匙点;(用用&来判断是否能打开该门; (>>右移&1来判断);100表示有第3把,111表示有第3,2,1把钥匙,如果该点为钥匙点,则可采用|运算来模拟拾取,显然0001|1000 = 1001,同理,当为相应的门时采用&运算来模拟开启,例如1101 & 0原创 2013-08-26 19:00:08 · 576 阅读 · 0 评论 -
hdu(2717)Catch That Cow
运用优先队列把所有情况都入队,然后取出步数最少的。。#include"stdio.h"#include"string.h"int visit[110000];#include"queue"using namespace std;int n,m;struct point { int x,step; friend bool operator { ret原创 2013-08-15 14:49:58 · 556 阅读 · 0 评论 -
hdu(1728)逃离迷宫
本题求的是拐弯最少的,可以用最有队列来求。。只要到达目的地,并且转的弯数小于所要求的即可。。#include"stdio.h"#include"string.h"#include"queue"char map[110][110];int visit[110][110];using namespace std;int dir[4][2]={1,0, -1,0,原创 2013-08-15 13:07:30 · 526 阅读 · 0 评论 -
hdu(1253)胜利大逃亡(队列+搜索)
本来用优先队列,没想到超时厉害。。最后改成队列,立刻过了,竟然比优先队列快乐进千毫秒。。#include"stdio.h"#include"string.h"#include"queue"using namespace std;int a,b,c,T;struct point { int x,y,z; int step;};int dir[6][3]原创 2013-08-15 16:15:08 · 525 阅读 · 0 评论 -
hdu(1175)连连看
险过。。和胜利大逃亡差不多。。一样的道理。。注意进行剪枝,不满足条件的直接NO,不进入dfs之中。。 #include"stdio.h"#include"string.h"#include"queue"int map[1001][1001];using namespace std;int n,m,visit[1001][1001];int sx,sy,ex,原创 2013-08-15 17:51:59 · 515 阅读 · 0 评论 -
hdu(1548)A strange lif
还是队列用着不错,一下AC了。。。挺简单的,把所有可能全部遍历一遍,最后取最优解。。和hdu(2717)Catch That Cow一样的方法。。 #include"stdio.h"#include"string.h"#include"queue"using namespace std;int visit[210];int p[210];int n,a,原创 2013-08-15 20:08:36 · 452 阅读 · 0 评论 -
hdu(2425) Hiking Trip
题意;给出一个地图,地图有四种路面,经过每种路面花费的时间不同,问从起点到终点所花费的最少时间是多少这个题很好;独自完成了;所要注意的是;一;用队列这样写不对,要控制入队的量;二;不要把值直接赋在map上,只要在map标记下即可, 然后再bfs中加上对应的时间值; #include"stdio.h"#include"string.h"#inclu原创 2013-08-23 15:02:29 · 620 阅读 · 0 评论 -
hdu(2102) A计划
/*题意很容易理解;值得注意的是:把那些不能走的转化为墙;一;如果#的对面是“*”,则将#变为’*‘;二;两层对应的都是’#‘则把他们都转化为’*‘;错几次的原因;一;bfs中不满足是输出负一,不能是零,找了好久才找到这个错误;二;用了三维坐标,不好控制;三;上面的转化没转化完;四,visit放在外边超时了;*/ #include"stdio.h"#原创 2013-08-23 12:55:54 · 543 阅读 · 0 评论 -
hdu(2579) Dating with girls(2)
这个题有意思的是:墙可以消失,只要时间是k的倍数,在此时墙都可以消失一秒,单此题不同之处就是,每一个点可以走多次,但必须是在不同的时刻,这就必须要用三维数组来标记了。visit[i][j][s/k]表示在(i,j)这个点在s/k的时刻走过了。。所以在本题可以行走的条件是;一;map[i][j]=='.';二;map[i][j]=='#'and s/k==0时;任意一个都原创 2013-08-22 16:26:59 · 524 阅读 · 0 评论 -
hdu1242 优先队列加广搜
http://acm.hdu.edu.cn/showproblem.php?pid=1242 题意:图中有多个点r,要求从r到a的最短路。用bfs从a开始搜,每次搜上下左右四个位置,并且入队列。直到队列为空,那么就不存在路径。,搜到x,则额外加1,搜到r,直接返回步数加一,否则步数加1.简单的说一下啊;题中可能有多个r,但是只有一个a,所以我们就从a搜到r;优先队列只是原创 2013-07-28 13:00:47 · 594 阅读 · 0 评论 -
hdu1837(优先队列)看病要排队
分析: 优先队列水题。 注意优先队列要定义在大while里面,等效于每次都初始化为空。#include#include#includechar a[100];using namespace std;struct point{ int x,y; friend bool operator { if(a.y!=b.y)原创 2013-07-28 13:14:14 · 571 阅读 · 0 评论 -
Stones(hdu1896)优先队列
【题目大意】 给定N个珠子,从1到N编号,然后是M个配对关系(x,y),表示珠子x和y可以相邻,要求用最少的珠子组成串,且所用珠子个数是大于或等于3的奇数,求这个最小的珠子个数的值。 【详细分析】 刚开始看到题,是自己刚刚挂的一个DIY:2008“Sunline Cup”邀请赛里的第一题,大概的想了下,觉得可以转换成最小环来做,刚好自己会最小环(可以参考我的最小环原创 2013-07-28 19:47:18 · 512 阅读 · 0 评论 -
poj2312 Battle city (优先队列)
#include #include#includeusingnamespace std; int dir[4][2]={-1,0, 1,0, 0,1, 0,-1}; char map[1000][1000]; int visit[1000][1000]; int n,m; structpoint { int原创 2013-07-28 12:54:30 · 553 阅读 · 0 评论 -
hdu2822((Dogs))优先队列
描述:虽然水题,但错了几次,才对。。要明白优先队列的原理。。就很容易掌握了,得心应手。。题意:起点到终点,’X‘处不用时,’ . '用时为1,求到达终点的最小时间。 优点:因为当前状态的下一个状态不能确定,所以如果用普通广搜的话,必须将整个图遍历一遍,但是此题的n*m可能为1000*1000,必定超时。所以考虑用优先队列。即,每次探查到的点入队列时,不是直接放到队尾,放在队列中合适的位置(此元素前原创 2013-07-28 12:56:26 · 772 阅读 · 0 评论 -
hdu4006(优先队列)
http://acm.hdu.edu.cn/showproblem.php?pid=4006分析: 有很多方法,不过如果想省事儿的话,还是用优先队列,只存前k大的数就行了。 #include#include#includeusing namespace std;struct point { int num; friend原创 2013-07-28 13:12:39 · 588 阅读 · 0 评论 -
优先队列相关知识
empty() 如果队列为空返回真pop() 删除对顶元素push() 加入一个元素size() 返回优先队列中拥有的元素个数top() 返回优先队列对顶元素在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。使用方法:头文件:#include 声明方式:1、普通方法:priority_queueq;//通过操作,按照元素从大原创 2013-07-28 13:01:37 · 496 阅读 · 0 评论 -
Windows Message Queue((hdu1509))基础题
讲一下优先队列的用法,其实我就想用两种,至于重载运行符 Q; 这里表示优先队列Q里面的int型的数的优先级是根据数的值的大小。值越大,优先级越高。第二种是自己写一个比较函数:priority_queue Q;type表示要进行比较的数据的类型,container则表示保存这个数据的容器,而functional则表示比较函数。对于比较函数可以这样定义:struct cmp{原创 2013-07-28 13:09:01 · 556 阅读 · 0 评论 -
hdu(1026)Ignatius and the Princess I(BFS + 最短路)
用优先队列确定最短时间,并用数组 记录路线。。BFS:如果能找到路径, 要输出最短时间内的路径信息.为了方便输出路径, 从终点开始BFS, 搜索最短的路径,每个位置元素中, 记录前一个位置的信息, 则能输出从起点(0, 0) 到 (终点)的最短路径.最短路径:从 out 往周围搜索其他位置时, 当搜到一点 in;此时就判断:(0, 0) -> cur -> next这样加入原创 2013-07-29 14:02:19 · 780 阅读 · 0 评论 -
(hdu2612)
郁闷死:很容易理解的题,第一次果断超时;借第一次的经验;在搜索到两个人的过程也把到他们之间的距离存了起来;结果错误,和学哥找了一晚上,嚓,原来错着了,乖乖,字符串还没输出完我就开始查找了。。不过经过这次找错,错一点,什么不可思议的结果都会出来。。#include"stdio.h"#include"string.h"#include"queue"#define inf原创 2013-08-19 19:56:48 · 628 阅读 · 0 评论 -
hdu(2416) Treasure of the Chimp Island
/*用了一下午终于出来了;题意:要得到宝藏‘$‘,所经过的最小步数;所有入口都在边界上;可以从’#‘’A--Z,进入迷宫,从不同的入口进入是会携带不同的炸弹;0,1,。。26;;遇到‘。’直接过去,当遇到1,9时有两种选择,一是用炸弹,耗时为零,二是同过去耗时为权值;在这里选择了一个状态量,来取得最优值;*/ 题意: 给出一个图,门都在边界上。只能从一个门进去。选择耗费的原创 2013-08-29 17:04:45 · 575 阅读 · 0 评论