超难问题 - 九宫格(智商<=150者请勿擅入)!!
大家玩过九宫格没有?
有1-8共8个数放到一个3 x 3的格子中,初始状态为
1 2 3
4 5 6
7 8 _
可以看到多出一个空。现在将它打乱,比如形成如下的布局:
2 5 7
6 4 1
3 _ 8
现在要将该布局恢复成初始状态
问题1, 对于任一个布局,都有一个最优走法,即步数最少,怎样通过计算机来找出这个最优走法,给出源程序。
问题2, 在所有布局的最优走法中,必有一个最大值,其值是多少?(超难)
走法,每次只能将下划线所在的空格与其上或下或左右的数字进行交换。
如上面的布局下一步可以走为:
2 5 7 2 5 7 2 5 7
6 4 1 或 6 4 1 或 6 _ 1
_ 3 8 3 8 _ 3 4 8
我的思考:
对问题1,用穷举法,以空格为焦点进行思考,想象不是走数字,而是走空格,那么对于角的位置,下一步有2种走法,对于正中的位置下一步有4种走法,其它位置有3种步法,进一步的考虑,因为我们不可能把来的路当作前进的方向,所以以上走法都要减1, 当然第一步例外。再考虑,如果当前的布局和前面的布局相同,再走下去可能死循环,所以一旦发现前面已经出现过的布局,不再尝试,立即回退一步。
先设定一个最大步数,如果步数超过这个最大步数,则不再尝试,回退一步,直到尝试出一种可能性,将此时的步数作为最大步数,重复刚才的步骤,最后得到的步数将是最优步数。
以上方法的缺点,因为可能的布局共有9!=362880,最坏的情况可能很费时,如果将问题扩展到4 x 4,5 x 5,将有16!,25!种可能,数据量太大!寻求其它解法。
对问题2,要想求解,必须求出所有布局的最少步数,然后取其最大值。这不可能,特别是将问题扩展到4 x 4,5 x 5时,应该有其它解法。