热情软件屋

 

九宫棋子问题


编号:QA004488
建立日期: 2001年11月25日 最后修改日期:2003年11月30日
所属类别:

16563631:
    操作系统:N/A
    编程工具:N/A
    问题:我有一个课题十分棘手,希望能给我这个课题的程序,谢谢。
    [课题]:在一个3乘3的九宫中有1-8着8个数及一个空格随机摆放在其中的格子里。如下面左图所示。现在要求实现这样的问题:将该九宫调整为如下图右图所示的形式。调整规则是:每次只能将与空格(上,下或左,右)相临的一个数字平移到空格中。试编程实现这一问题的求解。
    ------------- -------------
    | 2 | 3 | 7 | | 1 | 2 | 3 |
    ------------- -------------
    | 1 | 8 | 6 | | 8 | | 4 |
    ------------- -------------
    | 5 | | 4 | | 7 | 6 | 5 |
    ------------- -------------
    我希望各位高手能给我答案,或者一些信息,谢谢!

回答:

    下面是算法大意:
    (算法中的每一步都是保证可行的,且每一次调整都不涉及已经固定好了的元素)
    -----------------------------------------------------------------------
    a. 将1固定在左上角
    b. 将2调整到其最终位置,此时
     若3已经在其最终位置则
     固定2和3,
     否则按如下步骤调整:
     (1)将3调至第一列中间
     (2)将2调至右上角
     (3)将3调至第三列中间
     (4)在保证2和3位置不变情况下,将空档调于第一行中间
     (5)固定2和3至其最终位置
    c. 将4调至其最终位置,此时
     若5已经在其最终位置则
     固定4和5
     否则按如下步骤调整:
     (1)将5调至左下角
     (2)将4调至右下角
     (3)将5调至第三行中间
     (4)在保证4和5位置不变的情况下,将空档调至第三列中间
     (5)固定4和5至其最终位置
    d. 将6固定至其最终位置
    e. 将空档调至其最终位置,此时
     若7和8不在其最终位置则
     本题无解!
     否则
     解答完毕!
    另:这个问题难度并不大,只是做法比较繁索而已。但若只想做一个小游戏程序,让人自己去手工解决却很简单,本人已经写出了手工游戏的vb程序。有兴趣的读者可以来信至: mr.yangs@371.net 索取源代码。如果你想得到以上算法的源程序,你也可以来信索取,当然,希望你来信时我心情好,一时手痒将它写完了。本算法由长空一笑先生给出,谢谢。
    
    no的意见:
    学过人工智能,里面有这个游戏的解答方法,可以用好多种方法解。最简单的就是深度遍历,或者广度遍历。在这里很难说清楚,自己可以看看人工智能的资料。

此问题由mr.yangs回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 其他方面,

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio