转载地址已经废弃,这里做个备份。
作者: 许剑伟 2006五一节于福建莆田十中
转载:http://www.fjptsz.com/xxjs/xjw/rj/110.htm
一、算法的由来:
也不知写了多少行程序,累了,写点轻松的吧,可千万不要和操作系统打交了!还有那该死的Socket,真讨厌,什么“缓冲区不足”,我不是有2G内存,怎么就不足了?
志雄正潜心研究24点算法,向我要全排列的算法,我给他一个利用堆栈解决方法,寥寥几行,志雄叫好。看他挺专心的,于是我也加入他的24点项目。花了一个晚上考虑算法,第二天早上,完全实现了我的算法,用时0.75秒,解出1900道24点题目的完全解,比较满意。第二天再和李雄讨论算法并最后定稿。后来李志雄和我谈起华容道的问题。想来颇为感慨,大概6年前,林清霞老师给我“华容道”时,我花费了整整一个下午时间,也没能走出来,一恼火,打开电脑编程来解。用TC2.0编写一个程序,花了一天,终于写好,并得到结果。可如今再提“华容道”时,我竟然对当时的算法很模糊,我知道写那种程序有一定难度,可多年后,在我更加熟悉程序设计之后,怎么突然没头绪了,只记得当时写象棋程序花费了不少时间,华容道应是小问题,当时的我到底有用了什么招术?我想,我应再闯“华容道”。
可是要用什么算法呢?在网络上找了很久,看了几篇,没找到我满意的,仔细分析,这些算法效率不行,我不想采用。于是我又坐下来考虑算法,3个小时过去了,终于有眉目了。
本文算法可在40毫秒内解出“横刀立马”(P2.4G),其它棋局耗时略有不同。本文程序利用哈希技术优化后速度提高3倍,约12ms/题。
二、棋局:
横刀立马
图中棋子共10个,滑动棋子,把曹操移正下方出口。
有数学家指出,此问题单靠数学方法很难求解。
“华容道”开局布阵有数百种,以上仅是一种。
三、前人研究:
引网文:“华容道”是世界著名的智力游戏。在国外和魔方、独粒钻石并列,被誉为”智力游戏界三大不可思议”并被编入学校的教科书。日本藤村幸三朗曾在《数理科学》杂志上发表华容道基本布局的最少步法为85步。后来清水达雄找出更少的步法为83步。美国著名数学家马丁·加德纳又进一步把它减少为81步。此后,至今还未曾见到打破这一记录的报道。
网络上可找到几个有效的算法例程,