

























问题描述:
有一个3×3的棋盘,其中有0~8九个数字,0表示空格,其他的数字可以和0交换位置。求由初始状态到达目标状态步数最少的解。
解决八数码问题的常用方法为图搜索法,可用广度优先、深度优先和A*算法实现,其中A*算法又因估价函数的不同而有着不同的搜索时间。
程序说明:
在本程序中,用A*算法分别实现了八数码问题,其中A*算法的估价函数选择的是“不在位”数和当前层数之和,初始状态和目标状态均可由用户设定,初始状态和目标状态由文件读入(test.txt):
初始状态:
2 8 3
1 6 4
7 0 5
目标状态:
1 2 3
8 0 4
7 6 5
程序的输出为:
输出
程序为:
八数码问题(8-pullza)
将程序改了下,使用了优先队列和哈希式查找,使在OPEN表找最小f值的时间缩小至NlogN,而且在扩展节点的时候判断节点是否已经扩展过的时间为o(1)了
输入:
test.txt
输出:
result.txt
程序是改出来的,没有一气呵成的感觉
Code
这个程序在visual studio 2008 中运行还是有问题的,如果在g++编译器就没有问题,很复杂的都可以算出来
因为是只是写程序,对程序有所研究,对问题本身没有研究,应该还有很多可以优化的地方
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。