一、题目:有1到8八个数字,放在一个3x3的九宫格里面,
那么会留下一个空格。空格可以和上下左右的数字进行交换,可以认为空格在移动。如果移动成
则游戏胜利。
给一个初始状态,是否能胜利,并给出如何移动才能胜利。
二、实例:
迷宫实例一:从起点到终点,如何用代码实现?
分析:每个点都可以按照右下左上的方向来进行尝试,如果是墙壁,就换一个方向,如果可以走,就往前走到下一点,然后再接着尝试。直到到达终点为止。
步骤:1、右边是墙,无法通过,尝试下边,可行,第一步往下走。第二步右边可行,往右走,(尝试在编程领域叫做搜索)
2、第三步按照右下左上的方向搜索,右边是墙,下边是墙,左边可以走,但是左的点走过了,不应该再去搜索,于是应该往上走。(不再搜索一些明显不对的方向,这在搜索算法中叫做“剪枝”,剪掉没用的分支,提高效率)
迷宫实例二:
分析:同上面方法,按右下左上方向搜索,但到第三步的时候,算法会走到右边去,进入一个死胡同,就再也出不来了,这个时候就应该用到“回溯”,赶紧往左退回尝试下一个方向。注:这块并不是往左走,而是回退,退回到上一步。如果我们正在往前搜索,当然不能走回头路。但是当前面没有路的时候,我们就需要返回来,找到之前有可能出现岔路口的地方,再去下一个方向进行搜索
三、华容道问题分析
1、空格可以往上、下、左走,不能往右走,就好像迷宫里面右边有一堵墙一样,空格往下走一步,这时候可以往左和往上,往上的话又回到原来状态,随意应该“剪枝”,下一步往左走。空格在华容道中移动,就好像我在迷宫里走动一样,每次到一个新的状态,就有几个方