八数码问题--A算法实现---C#实现---VS2008可以执行

问题描述:

       有一个3×3的棋盘,其中有0~8九个数字,0表示空格,其他的数字可以和0交换位置。求由初始状态到达目标状态步数最少的解。

       解决八数码问题的常用方法为图搜索法,可用广度优先、深度优先和A*算法实现,其中A*算法又因估价函数的不同而有着不同的搜索时间。

       用A算法可以得到较好的搜索策略,普通的宽度优先搜索在这个例子中生成了27个状态,有效地搜索状态仅为5个。用A算法,加入了估价函数,中间的生成状态仅为5个,对于这个例子可能有点特殊。但是说明了A算法的效率优势。

 

        这个算法对前一算法进行了部分的该进,主要是增加了A算法的实现,优化了函数主题部分(49-78行),去掉了多余的累赘代码,在86-170行代码。用的估价函数为:状态的深度和状态不在位的节点数之和。

程序说明:

       在本程序中,A算法、实现了八数码问题,                       初始状态默认为:  目标状态为:

             2 8 3        1 2 3
             1 0 4        7 8 4
              7 6 5        0 6 5

程序实现:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值