现在的位置: 首页 > 综合 > 正文

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

2013年10月30日 ⁄ 综合 ⁄ 共 6514字 ⁄ 字号 评论关闭

问题描述:

       有一个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

程序实现:


抱歉!评论已关闭.