随笔分类 -  算法与数据结构

摘要:原文:http://blog.sina.com.cn/s/blog_4afd4f7c010004zc.html标准的华容道游戏是在一个4*5的方阵中,布有一些各种形状的棋子,当然留有若干空格.你的任务是移动棋子,并把其中的一枚棋子移动到指定的位置,如以下布局,要求把上面的A棋子移动到最下方的中间(其中一个字母为一个棋子,*表示空格):B A A CB A A CD E E FG H I JG * * J解法就是朴素的,搜!搜索有两个难点,一个是状态转移,一个是状态判重.对于本题来说,状态转移是简单的,只用考虑与空格相邻的棋子怎么运动就行了.不过注意,不能用移动空格来状态转移,因为很多时候要多个 阅读全文
posted @ 2011-04-12 19:34 Cranny 阅读(384) 评论(0) 推荐(0)
摘要:DancingLinks在搜索中的应用1.1DancingLinks是什么DancingLinks是knuth在近几年写的一篇论文,在我看来是一类搜索问题的通用优化,因此我把它写下来,希望能在竞赛中得到一定的应用。1.2DancingLinks的主要原理是什么DancingLinks主要是用双向十字链表来存储稀疏矩阵,来达到在搜索中的优化。在搜索问题中,所需要存储的矩阵往往随着递归的加深会变得越来越稀疏,这种情况用DancingLinks来存储矩阵,往往可以取得非常好的效果。1.3这篇论文与knuth论文的不同本篇论文是对DancingLinks在竞赛的应用的一个介绍,并列举了几个竞赛中的例题 阅读全文
posted @ 2011-03-15 13:34 Cranny 阅读(9423) 评论(0) 推荐(7)
摘要:。。完全学习两位牛人的。。有链接 自己转过去看吧 阅读全文
posted @ 2011-02-09 20:18 Cranny 阅读(346) 评论(0) 推荐(0)
摘要:#include #include using namespace std; int C[32001];//数状数组 int Out[15001];//输出结果,Out[i]表示level i的星星个数 int N = 32001;//星星个数 //C[i] = a[i – 2^k + 1] + … + a[i],k为i在二进制下末尾0的个数。 int Lowbit(int x) { ... 阅读全文
posted @ 2011-02-09 15:32 Cranny 阅读(221) 评论(0) 推荐(0)
摘要:#include using namespace std; const int MAXN = 10000005; struct Node { int parent;//保存父节点 int rank;//以此小男孩为父节点的人数 }; Node boy[MAXN]; void init(void) { int i; for (i = 0; i cnt) cnt = boy[... 阅读全文
posted @ 2011-02-07 23:38 Cranny 阅读(303) 评论(0) 推荐(0)
摘要:HDU 1251 字典树 #include using namespace std; const int kind = 26; struct TreeNode { int count; TreeNode *next[kind]; TreeNode() { count = 1; for(int i = 0; i next[branch]) p->next[bran... 阅读全文
posted @ 2011-02-04 23:20 Cranny 阅读(225) 评论(0) 推荐(0)
摘要:网上转载,有点偷懒 阅读全文
posted @ 2011-01-23 20:55 Cranny 阅读(418) 评论(0) 推荐(0)
摘要:#include #include using namespace std; /* 贪婪法: 1)当人数4时,a,b,..,c,d(升序) 过去,回来,过去,回来(船要回来),让最大的2个过去. 很笨的时间是d+c+c+a=d+2c+a(所有时间都写出来后会发现时最慢的) 如果让最小的来送:d+a+c+a=d+c+2a 否则:b+b+a+d=d+2b+a 如果d+c+2a>t; whil... 阅读全文
posted @ 2011-01-23 16:46 Cranny 阅读(650) 评论(0) 推荐(0)
摘要:做了好几天,几个小错误,没耐心都没调试出来..A* 最小堆 hash表 还是超时..诶告一段落... 阅读全文
posted @ 2011-01-21 22:56 Cranny 阅读(294) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std; /* *八数码,未优化版 *总结 *如果用vector来保存的话,路径回溯有问题 *用map实现链表的随机访问或者直接在map上做 *用hash计算后在数组上做. *都可以以logn的时间减小.这个只是自己玩玩.所以没弄那么多. *以前看书的时候,说给链表加个头结点会很方便操作,一直没放在心上,... 阅读全文
posted @ 2011-01-18 21:24 Cranny 阅读(347) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1077 Source Code Problem: 1077 User: p_hoenix Memory: 220K Time: 0MS Language: C++ Result: Accepted Source Code #include #include #include #include #include u... 阅读全文
posted @ 2011-01-16 21:29 Cranny 阅读(572) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1077 /* procedure dfs(depth:longint); begin if 要剪枝 then exit; if 可行 then Print; if Depth #include using namespace std; struct Status { int board[3][3]; int... 阅读全文
posted @ 2011-01-16 02:13 Cranny 阅读(2244) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1664 //整数划分问题 #include using namespace std; /* f(n,m)表示将正整数n划分成若干个不大于m的整数的和的分法 f(n,m) = 1 n = 1 || m = 1 f(n,n) n m > 1 */ int f(int n, int m) { if(n ==... 阅读全文
posted @ 2011-01-15 13:54 Cranny 阅读(274) 评论(0) 推荐(0)
摘要://http://poj.org/problem?id=2449 #include #include #include #include using namespace std; typedef pair pii;//距离,顶点 struct Arc { int vex; int weight; }; const int MAX_VEX_NUM = 1010; const ... 阅读全文
posted @ 2011-01-14 17:57 Cranny 阅读(304) 评论(0) 推荐(0)
摘要:#include #include #include using namespace std; const int LH = 1; const int EH = 0; const int RH = -1; typedef struct BSTNode { string* data; int bf;//balance factor struct BSTNode *lchild, *... 阅读全文
posted @ 2011-01-13 18:42 Cranny 阅读(196) 评论(0) 推荐(0)
摘要:向量(Vector)在几乎所有的几何问题中,向量(有时也称矢量)是一个基本点。向量的定义包含方向和一个数(长度)。在二维空间中,一个向量可以用一对x和y来表示。例如由点(1,3)到(5,1的向量可以用(4,-2)来表示。这里大家要特别注意,我这样说并不代表向量定义了起点和终点。向量仅仅定义方向和长度。向量加法向量也支持各种数学运算。最简单的就是加法。我们可以对两个向量相加,得到的仍然是一个向量。我... 阅读全文
posted @ 2010-11-08 09:39 Cranny 阅读(837) 评论(0) 推荐(0)
摘要://------------------- 公用的常量和类型 ---------------------------- #include #include #include #include //函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #... 阅读全文
posted @ 2010-10-24 23:03 Cranny 阅读(324) 评论(0) 推荐(0)
摘要:#include #include #include #define N 5 #define M 9 void dfs(int x, int y); void pop(void); void print(void); void push(int x, int y); int maze[N][M]; struct node { int x; int y; }; int to... 阅读全文
posted @ 2010-10-24 22:36 Cranny 阅读(277) 评论(0) 推荐(0)
摘要:转自:http://hi.baidu.com/wicked_boy/blog/item/bf3f04fc21134e87b901a040.html 阅读全文
posted @ 2010-10-23 21:38 Cranny 阅读(774) 评论(1) 推荐(0)