华容道游戏是非常经典的BFS应用的题目。
下面是几个我参考过的链接:
使用java语言实现,充分体现OOAD和数据结构的应用,讲的非常详细,但是太过于复杂了:
http://www.cppblog.com/tx7do/archive/2006/09/18/12691.html
简单版本的介绍,非常有用,而且有完整的源代码:
http://blog.chinaunix.net/u/19651/showart_395172.html
虽然讲的详细,但是代码也成这副样子,值得同情:
http://www.fjptsz.com/xxjs/xjw/rj/110.htm
下面是我通过这道题的一些体会:
1、重复状态的判重方法
在很多与走步有关的题目中,一般会涉及到重复状态的检测,在搜索过程中需要忽略掉这些重复状态,这样才能避免不必要的搜索代价。
我使用通过对局面做hash的方法来检测是否存在重复状态,只有不重复的新状态才插入到hash表中。原来hash函数是通过对grid[5][4]这个局面进行移位运算来产生分布均匀的hash值,但是效果始终不理想。