搜索
文章平均质量分 78
自在_飞花
这个作者很懒,什么都没留下…
展开
-
POJ 3414 Pots
题意:有两个杯子 容量分别为 A,B;每次可以将其中一杯杯子倒满或倒空,或者将一个杯子中的水倒入另外一个杯子(必须将其中一个杯子倒空或倒满)。 这样每种状态就有可能衍生出六种新的状态。 典型的BFS。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #incl原创 2013-09-18 15:21:55 · 687 阅读 · 0 评论 -
TopCoder SRM 613 Div.2 C DFS+剪枝
昨天刚做了一个搜索题,感觉和这个的剪枝方法很像。当把剩下的数都选上时依然满足条件,则用组合数优化。sta[i] 标记的为 从第 i 个到 第 n 张牌一共出现多少个数,最多五十个数,状压就好了。STL 真心不会调试。。#include #include #include #include #include #include #include #include #p原创 2014-03-22 10:43:22 · 1186 阅读 · 0 评论 -
HDU 3442 Three Kingdoms BFS + 优先队列
已被周赛虐成挂零狗。 BFS + 优先队列 == 最短路,貌似是可以这样理解的。这样得到的结果即为花费最少的一条路。貌似初级计划里面有一个类似的题。 因为受过的伤不会再受,所以需要抽象出第三维来表示受过的哪几种伤(状压)。寒假集训的时候还给大一的选手出过这种题。。。竟然还有脸给大一的讲题。。#include #include #include #inc原创 2014-03-21 12:33:52 · 1148 阅读 · 0 评论 -
HDU 1728 逃离迷宫
y行x列,傻傻分不清楚。ans[ i ][ j ][ k ][ d ] 标记是否以 转弯k次且方向为d 的状态走过。被学弟蔑视的一道题竟然没能1A,老啦。#include #include #include #include #include #include #include #include #include #pragma comment(linker, "/原创 2014-04-30 00:53:16 · 1154 阅读 · 2 评论 -
POJ 3411 Paid Roads 搜索的小技巧
有n座城市和m(1如下例:4 41 2 1 10 102 3 2 10 103 1 3 10 102 4 3 10 90显然花费最小的路为 1 > 2 > 3 > 1 > 2 > 4。即花费最小的路中可能存在环,也就是说在最优路中,可能会经过某个点很多次。因为 n #include #include #include #include #in原创 2014-02-17 20:04:22 · 900 阅读 · 0 评论 -
POJ 3322 Bloxorz I 三维BFS
本来只是打算为今晚的CF热热手的,结果选了道坑爹的BFS。写了350多行的代码还WA了一次。。。。。对于普通的方格有五种情况,如下图所示,对于方格5来说,与1,与2,与3,与4组成的矩形为四种不同的情况,还有一种为竖直站立的情况。对于Easily Broken Grid只存在前四种情况。很显然第三维标记这几种情况即可。思路还算简单,代码写的比较麻烦了。。。。话说今年大年三十哇,原创 2014-01-30 18:05:18 · 1882 阅读 · 0 评论 -
CodeForces 382D Ksenia and Pawns __DFS
题意:给出一个棋盘和两个棋子,'#'可以同时放两个棋子,其他的最多只能放一个。开始时在棋盘上放两个棋子,每一回合两个棋子必须移动且只能按照指示方向移动一个格子。一个棋子移动一步就获得一分,问最后能获得多少分。思路:对于每一个格子,只能走向一个格子,但是可能能从多个格子走过来。则逆向建图就再合适不过了。因为在没有环的情况下,逆向建图每个节点的入度 显然此时可以得到一个森林,也可能只有一棵树。原创 2014-01-19 09:28:20 · 1575 阅读 · 0 评论 -
HDU 1175 连连看 简单的BFS
准确一点说应该算是个三维的BFS,第三位记录到达该点时的方向。总体来说算是比较基础的BFS了,171MS水过.....一开始还担心会因为memset的范围比较大而超时呢。。。。#include #include #include #include #include #include using namespace std;int num[1010][1010];boo原创 2013-12-19 13:02:47 · 943 阅读 · 0 评论 -
Poj 1753 Flip Game 状态压缩 + DFS
暴力枚举 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 char c;11 12 int m,t;13 14 int sum = 999999;15 16 void原创 2013-09-18 15:21:01 · 625 阅读 · 0 评论 -
HDU 1010 Tempter of Bone DFS + 奇偶剪枝
奇偶剪枝:对于从起始点 s 到达 终点 e,走且只走 t 步的可达性问题的一种剪枝策略。如下列矩阵 :从任意 0 到达 任意 0,所需步数均为偶数,到达任意 1 ,均为奇数。反之亦然所以有,若s走且只走 t 步可到达e,则必有t >= abs(s.x - e.x) + abs(s.y - e.y),且 (t&1) == ((abs(s.x - e.x) + abs(s.y -原创 2014-05-08 10:32:37 · 848 阅读 · 0 评论 -
HDU 1195 Open the Lock
双向BFS:分别在 起点 和 终点同时进行BFS。一般地,BFS随着层数的增加,状态数会越来越多,也就是状态数与层数呈正相关。如下图,:若从两端同时进行BFS ,则有显然减少的哪一些区域即为减掉的那些不必要的状态。#include #include #include #include #include #include #include #include原创 2014-05-08 12:36:45 · 926 阅读 · 0 评论 -
可重复覆盖的DLX
在精确覆盖的基础上只修改remove() 和resume() 就好了,每次选中一行,只把这一行对应的列以及这一行删除即可。很显然的,这样降低了矩阵缩小的速度,但是出现A*优化的补救方法,H()是在VJ上扒下来的,233。#include #include #include #include #include #include #include #include #inclu原创 2015-01-26 08:33:52 · 1172 阅读 · 0 评论 -
Topcoder SRM646 div1 600 bfs+剪枝
因为只有47个blocks,所以现在小范围内,即在-50 #include #include #include #include #include #include #include #include #include #include #include #pragma comment(linker,"/STACK:1024000000");#define EPS (原创 2015-01-17 08:22:31 · 749 阅读 · 0 评论 -
POJ 1475 Pushing Boxes
搜索这种东西只要写之前规划得当还是蛮顺手的。。mark[x1][y1][x2][y2]表示小人在(x1,y1) 盒子在(x2,y2)这种状态是否到过。剩下的就是优先队列 + bfs 了,另外开一个栈记录前驱以输出路径。#include #include #include #include #include #include #include #include #incl原创 2014-06-22 18:49:29 · 1108 阅读 · 0 评论 -
POJ 1184 聪明的打字员
简直难到没朋友。双向bfs + 剪枝。剪枝策略:对于2--5位置上的数,只有当光标在对应位置时通过swap ,up,down来改变,那么当当前位置没有达到目标状态时,left和right无意义。好了,只剪掉这里就过掉了。。。还有比较炫酷的方法实现枚举720种排列。。。然后状压什么的。。。功力不够完全看不懂。。。。#include #include #include #原创 2014-06-22 15:28:12 · 1606 阅读 · 0 评论 -
POJ 2286 The Rotation Game 迭代搜索深度 + A* == IDA*
感觉这种算法还是比较局限的吧,重复搜索是一个不好的地方,而且需要高效的估值函数来进行强剪枝,这点比较困难。迭代搜索深度是一个比较炫酷的搜索方式,不过有点拿时间换空间的感觉。首先迭代深度比较搓的写法是,首先设置一个阀值MaxH,初始为最小值。当在搜索深度Depth 另外一种比较吊的写法是二分搜索深度,若搜到则减小阀值,否则增大阀值。总之,迭代深度搜索就是通过改变深搜的深度来寻找最原创 2014-07-01 23:35:17 · 1023 阅读 · 0 评论 -
POJ 3131 Cubic Eight-Puzzle 双向BFS + HASH
超赞的一道搜索题,麻烦到没朋友,原创 2014-07-01 15:11:15 · 828 阅读 · 0 评论 -
初涉A*剪枝
挖坑防忘,天亮补题解。#include #include #include #include #include #include #include #include #include #pragma comment(linker, "/STACK:1024000000");#define EPS (1e-8)#define LL long long#define UL原创 2014-05-26 01:04:41 · 1635 阅读 · 0 评论 -
HDU 1429 胜利大逃亡(续) / SDUT 2193 救基友记3 简单的BFS
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2193题意:给定一个用二维数组表示的地图,地图上标出了起点,终点,带有编号的门和钥匙。问是否能在规定时间内走到终点,若能最少用时为多少。显然是简单的BFS,重点在于怎么对地图进行标记。在知道后台数据很小的情况下,无耻的用了链表,不晓得还有原创 2013-11-08 19:06:24 · 1138 阅读 · 0 评论 -
位运算
学习状态压缩 必须要先搞懂位运算 这是集中位运算的符号与其作用。名称C/C++样式Pascal样式简记法则按位与&and全一则一,否则为零按位或|or有一则一,否则为零按位取反~not原创 2013-09-18 15:20:26 · 636 阅读 · 0 评论 -
BFS + 状态压缩 POJ 2965 The Pilots Brothers' refrigerator
#include #include #include #include #include #include using namespace std;char c;int m;int sp[999999];struct Q{ int sta,ans,r,c,pre;} q[999999],t,t1;int top原创 2013-09-18 15:21:03 · 639 阅读 · 0 评论 -
POJ 2488 A Knight's Journey
骑士的旅行。 骑士可以每次走一个‘日’字,就像中国象棋里面的马。 给出一个 p*q 的棋盘,每个格子只能走一次,是否存在一种方法可以遍历整个棋盘。如果有多种方法输出字典序最小的。 关于此题中的字典序: 骑士每一次都会有八个方向可以选择,每一次都选择字典序小的来DFS。这样最终结果就是字典序最小的。 int jp[] = {-1, 1,-2, 2,-2, 2,-1, 1原创 2013-09-18 15:21:38 · 746 阅读 · 0 评论 -
POJ 2676 sudoku
数独问题。给定其中的几个数,找出其他符合规则的数。保证所给数据合法。典型的DFS。 又是1A真爽。 首先用三个数组标记每列每行每个九宫格出现过的数字。然后DFS寻找可能的状态。跑了400+ms。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using names原创 2013-09-18 15:21:58 · 901 阅读 · 0 评论 -
POJ 1416 Shredding Company
给出一个Max 和一串数字。将这一串数字分割成若干个数,其和为sum。求最接近但不超过Max的sum。。。 将这个sum及这若干个数输出来。 DFS + 打印路径 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace st原创 2013-09-18 15:22:02 · 662 阅读 · 0 评论 -
POJ 3009 Curling 2.0
简单的DFS。一开始把DFS里面的一个变量弄成 全局变量了,调试了半个小时才发现...... 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int MinStep; 10 11 int m原创 2013-09-18 15:22:07 · 660 阅读 · 0 评论 -
HDU 4714 Tree2Cycle
简单的DFS 有些大神有树形DP做的,效率要高很多。 若degree[i] > 2 ,则断开 i 与其父节点之间的边 和 degree[i] - 3 个子节点之间的边,其父节点 度 减一。 此时总消费增加 sum += (degree[i] - 2)*2; 1 #include 2 #include 3 #include 4 #include原创 2013-09-18 15:22:30 · 757 阅读 · 0 评论 -
SDUT OJ 2138 最短路
1 #include 2 #include 3 #includestring.h> 4 5 int n,h[1010]; 6 7 struct M 8 { 9 int data;10 struct M *next;11 }*head[1010];12 13 struct Q14 {15 int step;16原创 2013-09-18 15:20:00 · 720 阅读 · 0 评论 -
HDU-1045 Fire Net
1 #include 2 #includestring.h> 3 4 char a[6][6]; 5 int v[6][6],hash[6][6];//V标记是否已经放过,hash标记是否此位置是否进入过队列 6 int n,sum,max; 7 8 struct N 9 {10 int x,y;11 };12 13 14 int j原创 2013-09-18 15:20:05 · 620 阅读 · 0 评论 -
POJ 3126 Prime Path
简单的BFS + 素数筛。。。。。手残把素数筛敲错了 调试了大半年......不过终于迎来了久违的 1A 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 bool Ha原创 2013-09-18 15:21:48 · 600 阅读 · 0 评论 -
SDUT OJ 2449 走迷宫
1 #include 2 #includestring.h> 3 4 int map[10][10],sum,n,m,vis[10][10]; 5 6 void seek(int mbn,int mbm) 7 { 8 int jn[] = {0,0,-1,1}; 9 int jm[] = {-1,1,0,0};原创 2013-09-18 15:20:02 · 1253 阅读 · 0 评论 -
深度遍历
#include #include int mark,k,m,map[101][101],vis[101][101],h[105]; void seek(int mb) { if(h[mb]) return; else h[mb] = 1; int i,j; if(mark) {原创 2013-09-18 15:19:58 · 767 阅读 · 0 评论 -
HDU 4431 Mahjong 简单的DFS
题意:给出十三章牌,问有几种赢的方法。思路:DFS枚举所有的情况,记得剪枝。自己想得几组数据。71s 1s 2s 2s 3s 3s 4s 4s 5s 5s 6s 6s 7s3 1s 4s 7s1s 1s 3s 3s 5s 5s 1p 1p 5m 5m 7c 7c 1c1 1c1s 2s 3s 2c 2c 2c 2p 3p 5m 6m 7m 1p 1p2 1p 4原创 2013-12-02 10:47:02 · 963 阅读 · 0 评论 -
SDUT 2721 Cash Cow BFS+坑爹输入
以前已经做过一次这样的题,第二次做还是没能一A。。。。一直卡在输入上,学长说把scanf() 换成 cin ,然后果断A掉了。以此为戒吧,以后碰到类似的输入,记得用cin........Orz#include #include #include #include #include #include #include #include #include #inclu原创 2013-12-01 18:52:31 · 794 阅读 · 0 评论 -
POJ 1321 棋盘问题
百年难得一遇的会做的中文题...... 每一次DFS都有两种状态 放或者不放 简单的DFS模板题。 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int n,k,sum;10 11 char map[1原创 2013-09-18 15:21:43 · 618 阅读 · 0 评论 -
POJ 2531 Network Saboteur
枚举了所有状态 1800+ms过了...... 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 int c[25][25];10 11 int MaxSum;12 13 bool MarkSubSe原创 2013-09-18 15:22:05 · 708 阅读 · 0 评论 -
HDU 1253 胜利大逃亡
#includestring.h>#includeint a,b,c,pos[52][52][52];struct POS{ int x,y,z;} q[125110];int bfs(){ int s,e,i; struct POS temp,t; int jx[] = {0,0,0,0,1,-1}; in原创 2013-09-18 15:19:50 · 885 阅读 · 0 评论 -
基于邻接表的广度优先搜索遍历
#include#include#includestring.h>int k,h[110],mark;struct M{ int data; struct M *next;}*head[110];void init(){ int i; for(i = 0; i ) { head[i] =原创 2013-09-18 15:19:53 · 1642 阅读 · 2 评论 -
基于邻接矩阵的广度优先搜索遍历
#include#includestring.h>int mark,k,m,map[101][101],vis[101][101],h[105];void seek(int mb){ int q[100],i,s,e; s = e =0; q[e++] = mb; while(s e) { mb = q[原创 2013-09-18 15:19:55 · 1251 阅读 · 0 评论 -
POJ 2251 Dungeon Master
毫无意义的三维BFS..... 从 S 出发 每次可以选择六个方向 求到 E 的最小移动次数 。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 char maze原创 2013-09-18 15:21:46 · 633 阅读 · 0 评论 -
初涉关于精确覆盖的DLX
Dancing Links,跳动的舞者,的确是很飘的一种数据结构。DL是双向循环十字链表,其作用大体就是对精确覆盖算法的一种优化,在递归搜索的过程中利用链表容易删增的特性提高了精确覆盖算法的效率。强烈推一篇博客,讲述的很详细,弱就不多说了。http://www.cnblogs.com/grenet/p/3145800.html模板贴起来,自己写的有点挫。#i原创 2015-01-25 13:31:45 · 1011 阅读 · 0 评论