超难问题 - 九宫格(智商<=150者请勿擅入)!!

ohyeahcsdn 2001-11-29 05:53:19
大家玩过九宫格没有?
有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时,应该有其它解法。

...全文
107 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kylin_Li 2001-11-29
  • 打赏
  • 举报
回复
这个问题是一个经典的A*算法应用问题.
首先,并不是任何一种状态都有一种走法可以到达目的状态的.9宫格的状态空间可以分为两个部分,每个部分内部可以相互可达,但是两个部分之间是相互不可达的.
其次,用穷举法是不现实的,主要是太慢.而且回溯太多,层数太深,行不通.
上面dash的想法实际上就是A*算法的一个思想.不过不完善.
对于具体的A*算法,清华的那本<人工智能导论>上面有详细的讲解.
dash 2001-11-29
  • 打赏
  • 举报
回复
穷举是不可能的,我认为应该对当前布局和四种可能的每一种估分,能使分数大的可能移法优先走
,问题的关键在于估分函数。我认为可按两条规矩建立:
1 现在某一块已在目的地上,可加分。
2 可使下一步状态按目的状态有序排列时,可加分。

欢迎讨论
alpasino 2001-11-29
  • 打赏
  • 举报
回复
哈哈
dongfa 2001-11-29
  • 打赏
  • 举报
回复
NOKIA手机里的游戏

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧