惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 司徒正美
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
宝玉的分享
宝玉的分享
量子位
V
Visual Studio Blog
罗磊的独立博客
Vercel News
Vercel News
B
Blog
J
Java Code Geeks
S
SegmentFault 最新的问题
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
P
Proofpoint News Feed
GbyAI
GbyAI
G
Google Developers Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - 光光GG

最小生成树:使用堆和并查集的kruskal算法 最小生成树prim算法模板 【转】详细解说STL hash_map系列 松弛操作 SPFA算法 bellman-ford(贝尔曼-福特)算法 详细解说 STL 排序(Sort) c++常用算法收集 骨牌覆盖的已有研究 【转】自定义排序函数实现时需要注意的问题 【转】计算C++程序运行时间 解决netbeans乱码问题 在ubuntu8.04 stl vector 技巧 ACM中的64位整数 pku-1095-Trees Made to Order 七种qsort排序方法 memset ,memcpy sql server 通过mdf文件恢复数据库 产生满足正态分布的随机数
【原】八数码问题(8-puzzle Problem)
光光GG · 2008-10-06 · via 博客园 - 光光GG

问题描述:

       有一个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++编译器就没有问题,很复杂的都可以算出来

 因为是只是写程序,对程序有所研究,对问题本身没有研究,应该还有很多可以优化的地方