freecell空当接龙自动步骤程序说明

来源:互联网 发布:淘宝极速退款额度 编辑:程序博客网 时间:2024/04/29 03:11

freecell空当接龙自动步骤程序说明地址:

http://blog.csdn.net/daineng/archive/2006/04/03/649552.aspx

 

cards.h中有个LIMIT_DEEPTH的数值定义,当在$LIMIT_DEEPTH步之内还没能够把一张牌放到左上角那摞牌里面,就认为这是一个坏的情况,这样的牌局会被丢弃不继续考虑。

 

抱歉我这里是HARDCODE,没有用配置文件。一般我将LIMIT_DEEPTH设置为11,随便尝试了几个牌局:#17710, #4740, #13104, #19482, #18867, #17641,情况还可以,有几个算的相当快了。如果把LIMIT_DEEPTH设置的小点,无疑速度会有很大提升,但越小就越有可能算不出来。

 

#11982据说是无解的牌局,这个牌局其实不算复杂的牌局,程序很快就结束了。按原先的设计,只要LIMIT_DEEPTH足够大,就几乎可以遍历所有的牌局(如果解出来当然就不会继续遍历其他情况,但也可以改改程序,本来我是要算出所有情况的,但时间和内存有限,

呵呵,部分程序还保留在fc.cpp文件里),我已经将LIMIT_DEEPTH设置为66了,应该足够大了,但还是很快就结束了。11982确实是无解的。(谁说有人算出来了,把过程拿出来看看)

 

最后的结果保存在result.log文件中,很容易看懂,但比较难看,无奈比较忙,实在不想再去改程序了。将result.log的行数减去4,再除以31,就是步骤的数目。如果要测试某个牌局,把牌局写入cards.ini的最后一行,直接运行程序;如果已经记录了这个牌局,可以用序号来调用它,如:

    [ndai@nj-ndai freecell]$ ./fc 11982

 

至于其他比较难解的:

  #617   : 554315    : 154

  #1941  : 27652     : 117

  #10962 : 3480632  : 154

 

中间的数字是考虑到牌局的数目,可以作为运算负荷的标志,数字越大表示程序越难计算出来。

 

其中#10962运算时间太长,无奈之下把LIMIT_DEEPTH改成9,算出来了,还是花了很长时间。

 

#-1, #-2就没有试了,按理说程序应该很快就结束(只是根据程序的原理来猜测的),没必要测试这两种牌局。

 

这个程序只能在linux下运行,debian下也是可以用的。

原创粉丝点击