搜索
Benzema67
北京邮电大学学生
展开
-
POJ 3460 Booksort IDA*
此题是黑书上的例题,其中估价函数比较强大,看黑书看懂的。不过这里也挺繁杂的,不小心就出错,贡献了好几个wa。代码能力还是太弱 其中的注意点我都注释了,其他的就是套模板了。 #include #include #include #include using namespace std; int n; int bound; int book[20]; bool ans; int Min(int a原创 2012-01-19 21:48:01 · 1247 阅读 · 0 评论 -
A* 简介(Amit's A star Page中译文)
Amit's A star Page中译文 译序 这篇文章很适合A*算法的初学者,可惜网上没找到翻译版的。本着好东西不敢独享的想法,也为了锻炼一下英文,本人译了这篇文章。 由于本人英文水平非常有限,六级考了两次加一块不超过370分,因此本译文难免存在问题。不过也算是抛砖引玉,希望看到有更多的游戏开发方面的优秀译作出现,毕竟中文的优秀资料太少了,中国的游戏开发者的路不好走。 本人能力有限转载 2012-01-18 22:18:55 · 1901 阅读 · 0 评论 -
UVA 11218 - KTV
brute force暴力枚举即可,位运算hash判重 #include int n,ans; int a[100],b[100],c[100],d[100],s[100]; void init(){ for(int i=1;i<=n;i++){ d[i]=(1<<a[i])+(1<<b[i])+(1<<c[i]); } } int main(){ int i,tm1,tm2; in原创 2012-01-27 22:45:57 · 1007 阅读 · 0 评论 -
HDU 胜利大逃亡 bfs+剪枝
这个不剪枝的话必TLE 还有可能出口是墙,我被这种情况坑了 #include #include #include bool map[55][55][55]; bool visit[55][55][55]; int a,b,c,step; int p[7]={0,0,0,0,1,-1}; int q[7]={0,0,1,-1,0,0}; int r[7]={1,-1,0,0,0,0}; int原创 2012-02-02 12:16:31 · 1145 阅读 · 0 评论 -
UVA 10603 Fill
其实这个题dfs就可以过了.. #include #include #include #include using namespace std; int ao,bo,co,d; int visit[205][205][205]; int res[205]; int min(int a,int b){ return a>b?b:a; } void dfs(int a,int b,int c,in原创 2012-02-02 12:58:56 · 1049 阅读 · 0 评论 -
UVA 321 - The New Villa BFS+位运算
状态总数10*2^10=10240,hash判重即可 注意点:在A房间不能关掉自己房间的灯(oh,my god,太伤了!) #include #include #include using namespace std; int r,d,s,sum; bool map[11][11],sw[11][11]; bool visit[11][1100]; int type[11][1100];原创 2012-01-27 22:43:48 · 1069 阅读 · 0 评论 -
hdu 3760
bfs 时间卡的比较紧 #include #include #include #include #define N 100100 using namespace std; int head[N],cnt,path[N],dis[N],mm[N]; bool vis[N]; int n; struct Edge{ int u,v,w,next; }edge[400100]; struc原创 2012-10-06 17:54:30 · 930 阅读 · 0 评论 -
ZOJ 3526
缩点+dfs判环 首先把所有的点缩成7类中的一个, 对于AAAAAAA这种,缩成一个点就好,一个点可以和周围连起来就全都能连起来;对于ACACACACA这种,要缩成两个点,因为要是剩下的只有一个A和一个C,缩成一个点是不行的,但是实际上是可行的;对于ACGACGACG这种当然就是缩成三个点了。然后图中最多只有1+1+1+2+2+2+3=12个点,直接DFS判断即可。 可参考http://zh原创 2012-10-22 22:30:56 · 889 阅读 · 0 评论 -
HDU 4324
判断三元环 #include #include #include #include using namespace std; #define NN 2001 char a[NN][NN]; int mark[NN], pre[NN]; int start,end; int n; /*bool dfs(int prev, int cur) { mark[cur] = 1;原创 2012-10-22 22:15:35 · 852 阅读 · 0 评论 -
POJ 2331 Water pipe IDA*
预处理估价函数。其他的套模板就可以了。 不过有一个地方没住意WA了2小时。 #include #include #include using namespace std; int sx,sy,tx,ty,n; int len[5],num[5]; int bound,total; int h[2]={1,-1}; int hx[1010],hy[1010]; bool ans; struct原创 2012-01-19 18:19:46 · 1252 阅读 · 0 评论 -
A*,IDA*,Dijkstra
最近做了很多这方面的题,看了很多前辈们的资料。逐渐对这些算法有了一些理解。 Dijkstra算法就是传统的求最短路算法。每次维护一个堆,记录未找到与源点之间最短路的点,然后不断从中取出最小的点,出堆,然后对其他点跟新。(可用set实现) A*算法与Dijkstra的区别就是每次出堆的点是到目的点相对最近的(用启发函数计算),然后对其他点跟新。A*算法总可以确定的找到一条最短路径。关于A*的正确原创 2012-01-19 14:10:44 · 3386 阅读 · 0 评论 -
POJ 1011 Sticks 强大的剪枝
这道题是黑书剪枝的例题,是用方法为调整法,但是这个方法很难掌握,还是多积累些经验吧。 首先要排个序,然后从大到小遍历回溯搜索是否可组成。 回溯中有剪枝。 1,对于一个还没有匹配任何长度(need=leng)的初始长度leng,随便搜一个小与此初始长度的木棍,如果之后的搜索不能匹配,那就不能匹配了,此时就要返回上一层修改策略。 2,还有就是如果当前选的小木棍len[i]==need时,如果这原创 2012-01-18 11:38:04 · 1553 阅读 · 0 评论 -
ZOJ 1649 Rescue BFS水题
要注意的是队列里入队条件有些变化 #include #include #include #include #include using namespace std; int n,m,sx,sy,ex,ey; char map[210][210]; int mini[210][210]; int h[4]={1,-1,0,0}; int g[4]={0,0,1,-1}; struct point{原创 2012-01-12 21:45:16 · 771 阅读 · 0 评论 -
ZOJ 2913 Bus Pass BFS水题
不过我感觉这道题的数据有点问题,WA了我好几次 这道题考点就是用SPFA求最短路 #include #include #include #define INF 1000000000 using namespace std; int te[10009],map[10009][15]; int num[10009],res[10009]; int nr,first,nz; int MAX (i原创 2012-01-13 17:56:57 · 1030 阅读 · 0 评论 -
POJ 1465 Multiple BFS
上来一看只会暴力,网上看了看资料,知道了还有一个剪枝 假设A,B对于X的余数相同 那么 (10*A+d[i])%x = (10*B+d[i])%x ,所以只有当余数没出现过的情况下才加入到搜索的队列中来 另外还有一个问题,就是可能是最后的答案出现很庞大的位数,所以要用指针,这里我是用数组模拟。 还有就是单独处理N=0的情况 ,RE了好几次 #include #include原创 2012-01-13 19:44:02 · 1075 阅读 · 0 评论 -
POJ Holedox Moving BFS hash判重
这个题被stl的queue坑了2小时,一直re,换成手写的队列就ac了 #include #include #include #include using namespace std; int n,m,l,k; int map[25][25]; bool visit[25][25][16400]; int h[4]={1,-1,0,0}; int g[4]={0,0,1,-1}; struct原创 2012-01-14 00:25:06 · 1025 阅读 · 0 评论 -
POJ 1077 Eight A*
/*终于用A*做出了这道经典八数码*/ #include #include #include #include #include using namespace std; struct point{ char board[10]; int space; }; int f[400000],d[400000]; int colour[400000],parent[400000],moves[400原创 2012-01-14 21:13:21 · 1052 阅读 · 0 评论 -
POJ 2935 Basic Wall Maze BFS
注意墙的处理,我是这么做的,把每个方块不能行走的方向标记出来,剩他的就是传统BFS了。 #include #include using namespace std; int sx,sy,ex,ey; int h[4]={1,-1,0,0}; int g[4]={0,0,1,-1}; int dir[8][8][5]; bool visit[7][7]; struct point{ int x;原创 2012-01-14 13:49:38 · 893 阅读 · 0 评论 -
POJ 2286 The Rotation Game IDA*
这个题用IDA*算法比较好,代码量也比A*小,空间消耗也小。 估价函数也比较好找,就是中间8个方格距离这8个方格同数的最短距离。 #include #include #include int init[30]; int sol[1010]; int bound; bool ans; int final; int e[8]={6,7,8,11,12,15,16,17}; int re[8]={5原创 2012-01-16 14:43:27 · 1217 阅读 · 0 评论 -
HDU 4016 Magic Bitwise And Operation 暴搜+剪枝
这个题得用一下位运算‘&’的性质:若c=a&b,则c 设置long long最大值时可以这么写 const long long MAX=(~(0ULL)>>1); #include #include #include using namespace std; const int N=45; const long long MAX=(~(0ULL)>>1); int t,c,原创 2012-01-17 13:57:59 · 898 阅读 · 0 评论 -
HDU 4090 GemAnd Prince 暴搜+剪枝
我在搜与某一块相连的方块时,用BFS搜的话用在HDU4989ms险过,在BOJ6012ms超时。 然而换成DFS搜在HDU2765ms,在BOJ3598ms都过了。估计这类问题DFS就是比BFS快。 不知道为什么啊? #include #include #include using namespace std; int n,m,k; int g[10][10]; int best; int原创 2012-01-17 18:09:38 · 1527 阅读 · 0 评论 -
BOJ 1461
bfs搜索 转动平面相当于改变重力的方向 #include #include #include #define N 110 using namespace std; struct line{ int x0,y0,x1,y1; bool flag; //flag=1从左到右 }lines[N]; struct Point{ int x,y,dir; }; bool vi原创 2013-03-25 23:41:48 · 1089 阅读 · 0 评论