前面一篇文章用jquery制作了一个拼图游戏,这篇文章介绍如何使用广度优先搜索算法来计算完成拼图的方法。 广度优先搜索是图论中最基本的一种遍历方法。以前学数据结构的时候接触过,但是没有真正理解,也从来没有用过,现在遇到这个拼图游戏路径计算问题,才真正知道了什么是广度优先搜索。 首先拿一个2行2列的作为例子,把每个小方格赋上号码,1230是我们的初始状态,目标状态是2013(0代表空白方格)。 由1230找到2013的具体算法如下: 第一步、取到根节点1230的两个子节点1032,1203。 第二步、取出子节点1032,跟目标节点对比,不相同,于是继续向下寻找到节点1032的子节点0132。 第三步、当找到子节点0132以后,有两种选择:1.查看节点1032的子节点0132。2.查看节点1032的兄弟节点1203.如果是第一种选择的话就是深度优先搜索,第二种选择的话就是广度优先搜索。两种搜索的时间复杂度都是相同的,但是我想要得到最短的路径,所以,这里采取广度优先搜索。即选择2。 第四步、取出节点1032的兄弟节点1203。跟目标节点对比,不相同,于是继续向下寻找到节点1203的子节点0213。 第五步、循环第二步。