2012年5月27日

UVa 10181 - 15-Puzzle Problem

摘要: 题目链接不好找:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1122用的 IDA*,跑了6.536s,时限是45s(刚看了627个人通过,我是第515名……,排行榜比较恐怖啊,见下图)这道题的逆序剪枝和八数码不同,具体参考这篇文章:http://mathworld.wolfram.com/15Puzzle.html1A! 1 # include <stdio.h> 2 # include <math.h>阅读全文

posted @ 2012-05-27 13:09 getgoing 阅读(18) 评论(0) 编辑

ZOJ 1217 eight

摘要: 八数码,双广、A*都超时了(可能是写得不好),IDA*通过了;在POJ上是16MS(和双广一样,A* 60MS左右),HDOJ上是800MS左右(双广是500MS),ZOJ上只有IDA*没超时(2480MS)。 1 # include <stdio.h> 2 # include <math.h> 3 # include <string.h> 4 5 # define MIN(x, y) ((x)<(y) ? (x):(y)) 6 7 # define N 9 8 # define DIR_N 4 9 # define INF 0x7fffffff 10阅读全文

posted @ 2012-05-27 01:07 getgoing 阅读(8) 评论(0) 编辑

八数码(IDA*)

摘要: IDA*+曼哈顿 相当快! 通过五组数据总计用时 0.015000 s.把宏定义中的N和SIZE改一下,就可以处理十五数码问题了,终于修炼到第八层了;刚开始还是使用结构体定义了状态,写得相当麻烦,后来发现IDA*中不像BFS和A*,只需要考虑一条路,,参考了lym(http://www.cnblogs.com/liyongmou/archive/2010/07/19/1780861.html)的(后面调试的受不了了,对照着此大牛的代码一点点改,最后发现是更新状态时,npos写成了pos……)# include <stdio.h># include <math.h># i阅读全文

posted @ 2012-05-27 00:51 getgoing 阅读(7) 评论(0) 编辑

2012年5月24日

八数码(A*)

摘要: 第一道A*,照着A*的框架写的,不是很理解A*,写的也很长,中间有些标记的不太理解,去掉标记在POJ提交通过了,还是没理解A*的思想;犯了个低级错误:在判断新状态 0 的位置(nx, ny)是否越界时,应该是0 =< nx < 3,结果写成了0<= nx <=3,还叫LJ大牛一块查,最后终于给发现了;在写 A* 之前以为 A* 会省不少空间(扩展的节点相比 BFS 少很多),实际上却开了两个大数组: f[] 和 g[],一下子感觉也挺浪费的,时间上感觉快了很多,我测试的几组都是0MS,在POJ上提交是64MS;两周以前就决心花几天时间搞八数码和十五数码(主要是想学学A*阅读全文

posted @ 2012-05-24 23:49 getgoing 阅读(20) 评论(0) 编辑

2012年5月23日

COJ 1080 A simple maze

摘要: 地图很小,50×50,所以普通的BFS就行了;1WA:地图用%s读取时,读入的是字符0,在判断是否有路径时和数值0比较。 1 # include <stdio.h> 2 # include <string.h> 3 4 typedef struct {short x, y;}queue; 5 6 const short dir[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}}; 7 8 int r, c, sr, sc, er, ec; 9 char m[55][55], v[55][55], d[55][55];10 queue 阅读全文

posted @ 2012-05-23 17:17 getgoing 阅读(3) 评论(0) 编辑

2012年5月21日

HDOJ 1043 eight

摘要: 实际上和POJ 1077一样,但是这里有多组输入,并且有一组输入为12345678x(也就是不需要移动就达到了目标状态),这时还要输出一个空行。 1 # include <stdio.h> 2 # include <string.h> 3 4 # define N 9 5 # define MAXN (362880 + 10) 6 7 typedef struct{ int k; char d; } foot; 8 typedef struct{ char a[N]; } state; 9 10 const char md[4] = {'u', '阅读全文

posted @ 2012-05-21 13:50 getgoing 阅读(14) 评论(0) 编辑

2012年5月20日

POJ 1077 eight

摘要: 双广,16MS,相当快。 1 # include <stdio.h> 2 # include <string.h> 3 4 # define MAXN (362880 + 5) 5 6 typedef struct 7 { 8 char a[9]; 9 }state; 10 11 typedef struct 12 { 13 int k; 14 char d; 15 }path; 16 17 path p[MAXN]; 18 const char md[4] = {'u','l','r','d'}; 19 阅读全文

posted @ 2012-05-20 21:33 getgoing 阅读(13) 评论(0) 编辑

八数码(双向广搜)

摘要: 早上看了提到双向广搜的一篇文章,其中讲了双向广搜可以节约一半的时间和一半的空间(理论上),我画了一幅图:(上面的对应普通BFS,下面的对应双向广搜)可以看出简单BFS的搜索节点大约是双向广搜的二倍。对于八数码问题,由于逆序剪枝可以将所有无解的状态全部剪掉,剩余的都是有解的状态,所以使用双向广搜速度可能会更快;对下面两组数据(分别输入)1 2 3 4 5 6 7 8 08 7 6 5 4 3 2 1 02 6 4 1 3 7 0 5 88 1 5 7 3 6 4 0 2正确输出对应是 30、 31使用BFS的运行时间:0.390s 0.359s使用双广的运行时间:0.109s 0.046s双广我阅读全文

posted @ 2012-05-20 18:16 getgoing 阅读(26) 评论(0) 编辑

2012年5月15日

八数码(BFS)

摘要: 参考白书的方法,将每一个状态映射到一个9位整数,然后再映射到它在所有状态中的大小位置(编码)来减少内存使用;按照 POJ eight这道题的输入形式写的(对空格的处理参考了Staigner大牛的做法:用scanf一个字符串来读取);输入包括初始状态和目标状态,输出为最短距离,如果无解,输出 -1;逆序的剪枝比较难理解:当前状态逆序数+已走步数与目标态逆序数同奇偶则有解,有解状态不会扩展出无解状态,反之也成立,初始状态的逆序数+初始态与目标态之间空格的Manhattan距离与目标态同奇偶择有解,反之无解;LJ 大牛提出了另一种剪枝的方法:将目标态中任意非零数互换位置得到的状态是无解状态可以达到的阅读全文

posted @ 2012-05-15 22:39 getgoing 阅读(23) 评论(0) 编辑

2012年5月11日

POJ 2406 Power Strings

摘要: 白书上看过这道题,枚举即可,530MS左右,这道题分类是 KMP ,可能是用 next 数组。# include <stdio.h># include <string.h>char s[1000005];int check(int i, int t);int solve(int len);int main(){ int len; while (1) { scanf("%s", s); len = strlen(s); if (len == 1 && s[0] == '.') break; else...阅读全文

posted @ 2012-05-11 11:13 getgoing 阅读(9) 评论(0) 编辑

仅列出标题  下一页

导航

统计

公告