Poj1077/HDU1043(A*搜索)八数码问题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043

             http://poj.org/problem?id=1077

 

题意:经典的八数码问题,问给出的一个状态能否通过移动达到一个目标状态,如果能就输出一个可行的移动方式.

 

 

看过好几本书上面都有八数码问题的介绍,采用A*搜索,可一开始写的用不在目标位置上的方块个数作为h(n),可一直超时~

 

然后改成各个方块到目标状态的曼哈顿距离,在北大OJ上AC了,尴尬的是HDU上给了整整五倍的时间,还是超时了,今天去图书管看看新书有没有到,然后又翻了翻以前看过的一本算法书籍,看到了一个高效的估价函数,即

 

           h(n)=d(n)+3*g(n)

 

  其中d(n)为各方块到目标状态的曼哈顿矩离,g(n)为非中心的每个方块的后继是否为其目标状态的后继,如果不是,g(n)+=2,最后如果中间位置的方块和目标状态不同g(n)+=1;

 

结果是,原来在POJ上700+msAC的代码,时间一下子降到了32ms~   不过郁结的是在HDU上还是花费500+ms的时间 ...

 

 

代码:

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值