POJ 1198 Solitaire 广搜

题目描述:

在一个 8 * 8 的棋盘上,有四个棋子,每颗棋子可在上,下,左,右,四个方向进行四种操作,四种操作是一
下的某一种:
     1. 若相邻格有棋子,则可像跳棋一样,跳过去,到达对称的一格。
     2.若相邻格为空,则可直接移过去。
 
问能否从一种状态在8步之内变成另一种状态?

题目分析:
   
    明显的一道搜索题,但是应该选取怎样的策略去搜索呢?
    估计一下普通广度优先搜索的复杂度:有4颗棋子,每个棋子最多有4种变换方式,所以一个棋盘可以对应16种状态,走8步的话,就有16^8 = 2^32的计算量,这几乎不能完成任务。
   
    考虑一下,这个题目的特别之处:给定两种状态,判断是否可达。操作的特别之处:操作具有可逆性,也就是说,从A到B状态,B到A依然是可行的。
   
    所以,可虑一下双向广搜,先判断复杂度:两个状态各进行4步操作,计算量为16^4=2^16,时空复杂度都可以满足。考虑到这里不要求最小步数,我们可以先把两种状态各走四步的可达状态先用广搜算出存表,然后直接查表比较即可。
    
    经过改进,湖南师范大学OJ的数据比POJ数据强很多。
    http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=10708&courseid=38

参考程序


posted on 2010-08-19 10:00 IronOxide 阅读(866) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿

随笔分类

随笔档案

ACMer

方向

搜索

最新评论

阅读排行榜

评论排行榜