路径寻找问题(八数码问题)

原创、转载请注明出处

之前的图都是显式的,路径寻找还可以用于隐式图。

隐式图的一个结点往往表现为一个状态,路径寻找就是寻找从一个状态走到另一个状态的路径。

八数码问题

3*3的矩阵中,8个格子中有数字,1个格子是空的,只允许空格子的相邻格子中的数字移动到空格子中这一种行为,给定初始状态和最终状态,求最小移动次数。

问题分析:

数字在格子中的一种摆法是一个状态,所有的状态组成一个状态空间,初始状态是起点,最终状态是终点,问题就转换成了 找从起点到终点的最短路问题。

最短路用bfs。(边界是找到最终状态,分支是当前状态能够转换成的状态,查重是记录搜索过得状态不再搜索,利用状态压缩使得状态容易表示)

搜索过得结点不用再搜索了,所以,每次枚举一个状态,都要检查是否重复了,这就要把“走过的结点”存储起来,然后查重。如何查重呢,每次都找一遍,遍历所有状态,比较9个数的顺序是否一样?太低效,要搜索的状态一共有9!=362879个,可以把012345678~876543210映射成0~362879,一一对应。

 

posted @ 2017-10-22 19:56  哲贤  阅读(288)  评论(0编辑  收藏  举报