2007年10月23日星期二

八皇后问题的实现

最近重新复习了一下沙特人的算法书, 根据他的算法实现了8皇后问题,
自己用C做了一个实现。
12个皇后的问题在我的机器(AMD 3000+, 256,LINUX 2.6)上运行了4.7秒左右,
后来在忘上又找了一个实现,这是链接, 他的竟然只用0.04秒。SO 快。
佩服。
贴上代码:
我的:

#include <string.h>
#include <assert.h>

long nqueens(int);
int test_queens(const char *,const int , const int);

int main(void)
{
assert (nqueens(12) == 14200);
//assert (nqueens(13) == 73712);
}

long
nqueens(int n)
{
register int key = 0;
int scount = 0;
char retv[20];
int test_val;
memset(retv, 0, 20);
while( key >= 0) {
while( retv[key] <= n-1) { // n-1 means zero was a position
retv[key] = retv[key] + 1;
if ( (test_val = test_queens(retv,key, n)) == 1) //part answer
key++;
else if (test_val == 0)
{
scount++;
}
}
retv[key] = 0;
key--;
}
outter:
return(scount);
}

// if queens is illegel result return -1
// else if queens is legel return 0
// or part result return 1
int test_queens(const register char *v,const int key, const register int n)
{
for (int i = 0; i < n; i++) {
char vi = v[i], vk = v[key];
if (vi == 0 || vk == 0 )return 1;
if( i == key ) continue;
if (vi == vk || vk-vi == key - i || vk-vi == i - key)
return -1;
}
return 0;
}

>time ./my
real 0m0.556s
user 0m0.552s
sys 0m0.000s

那位兄台的

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
typedef unsigned long ulong;
static const ulong ulong_bit = sizeof(ulong) * CHAR_BIT;


static inline ulong search(ulong lb, ulong cb, ulong rb, ulong cnt) {
if (~0ul == cb)
cnt += 1;
else
for (ulong bs = lb | cb | rb; ~0ul != bs;) {
ulong b = ~bs & (bs+1);
bs |= b;
cnt = search((lb | b) << 1, cb | b, (rb | b) >> 1, cnt);
}
return cnt;
}static inline ulong nQs(ulong m) { return search(0, ~0ul >> m, 0, 0); }int main(int argc, char* argv[]) {
ulong a = argc < 2 ? ulong_bit : atol(argv[1]);
ulong n = a < ulong_bit ? a : ulong_bit; // n = min(a, ulong_bit)
printf("%li: %li total solutions\n", 12, nQs(12));
return 0;
}

>time ./internet
12: 14200 total solutions

real 0m0.081s
user 0m0.024s
sys 0m0.004s

2007年10月12日星期五

放开怀抱, 抛弃追求,
摊开胸膛, 面对阳光。

闭上眼睛, 感受。。
大树遮荫, 呼吸。。

梦里有片绿地, 大树, 和你我。

2007年10月2日星期二

关于

这是一个 WordPress 页面范例,您可以编辑本页面并增加您或者网站的信息,这样访问者便可知道您来自何方。您可以创建类似本页面的任意多的页面或者子页面,并通过 WordPress 来管理。

Our_Dream 开站了

新博开张!~~OKOK~

2007年9月28日星期五

N70,竟然不提示短信

今天短信数量突破3000了,半年来的短信都在那里,
基本没有删除过,除了一些没意义的。
可是今天竟然短信来了不提示了,
搞了半天,格式化什么都试过了,
格式化以后是好了,
可是把备份的短信和一些其他东西弄回去以后
问题又出现了。
郁闷了好长时间,
忽然想到了把收件箱里的东西移动到自己的文件夹里面
行不行,试过以后还是不行,
恢复一下出厂设置, YEAH,
问题解决。OK了,哈哈, 好高兴。
今天还把我的移动心机给刷成了大陆行货。OKOK啦。~
终于告别丑陋的移动图标了, 速度也快了不少。

2007年9月21日星期五

奖学金

看到公告栏上的奖学金那栏有自己的名字的时候,感觉相当好。
由于四级的缘故, 到了大四才拿到第一次奖学金,感觉不错啊。。
大学该得到的都得到了, 剩下的就是CET6了。努力一下。把它过了
大学就没什么遗憾了。

2007年9月4日星期二

LDD第一个例子运行成功!

哈哈哈哈哈哈!!!
太高兴了,在经过了无数次莫名其妙的失败以后,终于搞定了内核模块~
哈哈哈哈~~~
大家不要笑我哈,高兴是很正常的~
总结经验, 主要是准备工作没有做好,
1. 要下载linux-kernel-src , 然后 make all
2.make modules_install 把你的模块文件放到 /lib/modules/linux-XX-XX中

最后把源文件中的 /linux/config.h去掉,
然后把makefile中的 uname -r 换成 /lib/modules/linux-XX-XX 就OK了。。。
呵呵。。。可以开始研究kernel device driver 了。

--
Shit happens!