
搜索
Benzema67
北京邮电大学学生
展开
-
POJ 3460 Booksort IDA*
此题是黑书上的例题,其中估价函数比较强大,看黑书看懂的。不过这里也挺繁杂的,不小心就出错,贡献了好几个wa。代码能力还是太弱其中的注意点我都注释了,其他的就是套模板了。#include#include#include#includeusing namespace std;int n;int bound;int book[20];bool ans;int Min(int a原创 2012-01-19 21:48:01 · 1271 阅读 · 0 评论 -
A* 简介(Amit's A star Page中译文)
Amit's A star Page中译文译序这篇文章很适合A*算法的初学者,可惜网上没找到翻译版的。本着好东西不敢独享的想法,也为了锻炼一下英文,本人译了这篇文章。由于本人英文水平非常有限,六级考了两次加一块不超过370分,因此本译文难免存在问题。不过也算是抛砖引玉,希望看到有更多的游戏开发方面的优秀译作出现,毕竟中文的优秀资料太少了,中国的游戏开发者的路不好走。本人能力有限转载 2012-01-18 22:18:55 · 1954 阅读 · 0 评论 -
UVA 11218 - KTV
brute force暴力枚举即可,位运算hash判重#includeint 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 · 1027 阅读 · 0 评论 -
HDU 胜利大逃亡 bfs+剪枝
这个不剪枝的话必TLE还有可能出口是墙,我被这种情况坑了#include#include#includebool 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 · 1162 阅读 · 0 评论 -
UVA 10603 Fill
其实这个题dfs就可以过了..#include#include#include#includeusing 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 · 1066 阅读 · 0 评论 -
UVA 321 - The New Villa BFS+位运算
状态总数10*2^10=10240,hash判重即可注意点:在A房间不能关掉自己房间的灯(oh,my god,太伤了!) #include#include#includeusing 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 · 1091 阅读 · 0 评论 -
hdu 3760
bfs 时间卡的比较紧#include#include#include#include#define N 100100using 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 · 951 阅读 · 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 · 908 阅读 · 0 评论 -
HDU 4324
判断三元环#include #include #include #include using namespace std;#define NN 2001char 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 · 872 阅读 · 0 评论 -
POJ 2331 Water pipe IDA*
预处理估价函数。其他的套模板就可以了。不过有一个地方没住意WA了2小时。#include#include#includeusing 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 · 1269 阅读 · 0 评论 -
A*,IDA*,Dijkstra
最近做了很多这方面的题,看了很多前辈们的资料。逐渐对这些算法有了一些理解。Dijkstra算法就是传统的求最短路算法。每次维护一个堆,记录未找到与源点之间最短路的点,然后不断从中取出最小的点,出堆,然后对其他点跟新。(可用set实现)A*算法与Dijkstra的区别就是每次出堆的点是到目的点相对最近的(用启发函数计算),然后对其他点跟新。A*算法总可以确定的找到一条最短路径。关于A*的正确原创 2012-01-19 14:10:44 · 3404 阅读 · 0 评论 -
POJ 1011 Sticks 强大的剪枝
这道题是黑书剪枝的例题,是用方法为调整法,但是这个方法很难掌握,还是多积累些经验吧。首先要排个序,然后从大到小遍历回溯搜索是否可组成。回溯中有剪枝。1,对于一个还没有匹配任何长度(need=leng)的初始长度leng,随便搜一个小与此初始长度的木棍,如果之后的搜索不能匹配,那就不能匹配了,此时就要返回上一层修改策略。2,还有就是如果当前选的小木棍len[i]==need时,如果这原创 2012-01-18 11:38:04 · 1571 阅读 · 0 评论 -
ZOJ 1649 Rescue BFS水题
要注意的是队列里入队条件有些变化#include#include#include#include#includeusing 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 · 793 阅读 · 0 评论 -
ZOJ 2913 Bus Pass BFS水题
不过我感觉这道题的数据有点问题,WA了我好几次这道题考点就是用SPFA求最短路#include#include#include#define INF 1000000000using 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 · 1059 阅读 · 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 · 1096 阅读 · 0 评论 -
POJ Holedox Moving BFS hash判重
这个题被stl的queue坑了2小时,一直re,换成手写的队列就ac了#include#include#include#includeusing 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 · 1052 阅读 · 0 评论 -
POJ 1077 Eight A*
/*终于用A*做出了这道经典八数码*/#include#include#include#include#includeusing 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 · 1074 阅读 · 0 评论 -
POJ 2935 Basic Wall Maze BFS
注意墙的处理,我是这么做的,把每个方块不能行走的方向标记出来,剩他的就是传统BFS了。#include#includeusing 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 · 917 阅读 · 0 评论 -
POJ 2286 The Rotation Game IDA*
这个题用IDA*算法比较好,代码量也比A*小,空间消耗也小。估价函数也比较好找,就是中间8个方格距离这8个方格同数的最短距离。#include#include#includeint 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 · 1237 阅读 · 0 评论 -
HDU 4016 Magic Bitwise And Operation 暴搜+剪枝
这个题得用一下位运算‘&’的性质:若c=a&b,则c设置long long最大值时可以这么写const long long MAX=(~(0ULL)>>1); #include#include#includeusing namespace std;const int N=45;const long long MAX=(~(0ULL)>>1);int t,c,原创 2012-01-17 13:57:59 · 919 阅读 · 0 评论 -
HDU 4090 GemAnd Prince 暴搜+剪枝
我在搜与某一块相连的方块时,用BFS搜的话用在HDU4989ms险过,在BOJ6012ms超时。然而换成DFS搜在HDU2765ms,在BOJ3598ms都过了。估计这类问题DFS就是比BFS快。不知道为什么啊?#include#include#includeusing namespace std;int n,m,k;int g[10][10];int best;int原创 2012-01-17 18:09:38 · 1545 阅读 · 0 评论 -
BOJ 1461
bfs搜索转动平面相当于改变重力的方向#include #include #include #define N 110using 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 · 1111 阅读 · 0 评论