摘要:在群里看到这样一个问题:解法如下: 1 #include <stdio.h> 2 3 #define MAX 500000 4 unsigned g_array[MAX + 1] = {0}; 5 6 #define EVEN(x) (((x)&1)==0) 7 #define ODD(x) (((x)&1)==1) 8 9 //判断两个数字是否互质的标准算法 10 unsigned __int64 gcd(unsigned __int64 a, unsigned __int64 b) /* Non-recursive version */ 11 { 12 ...
阅读全文
摘要:注意:本文介绍的方案有误,正确答案为240种。http://books.google.com.hk/books?id=On5QwCvEA9kC&pg=PA105&lpg=PA105&dq=%E5%85%AD%E9%9D%A2%E4%BD%93+%E5%9B%9B%E7%A7%8D%E9%A2%9C%E8%89%B2&source=bl&ots=Lc7xqJW4IC&sig=uG7Llh_kDgZSN3BGhLWaBU0nANg&hl=en&sa=X&ei=NYtXUYHFIY-UiQfhnYDQCQ&ved=0CE
阅读全文
摘要:今天看到一个简洁的例子来描述八皇后问题的文章,使用stl算法next_permutation来对解全排列并分别验证,代码上确实简洁,不过感觉此法在运算中做了很多无谓的工作,效率上应该不佳。不过,在处理八个皇后的情况下,还是能够很快处理出所有解的,但是皇后数量多了的话,就是极大延长求解时长。 八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 我这里做了一个算法,在一定程度上减少了重复计算,相信算法还有继续优化的空...
阅读全文
摘要:游戏在这里,让左边的青蛙和右边的青蛙对调位置。左边和右边各有三只青蛙,中心处有一个空位。每次可以跳一个青蛙,要么向前跳一格,要么跨过前方的青蛙跳一格,青蛙不能重叠,不能往回跳。 下面是解决该问题的穷举算法实现,算法已扩展到左边有任意只青蛙、右边有任意只青蛙、中间有任意个空位的情形:lr4.h 1 #ifndef _LR4_H 2 #define _LR4_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 int Resolve(int left, int blank, int right, int **ppMaps,
阅读全文