九宫棋子问题
编号:QA004488
建立日期: 2001年11月25日 最后修改日期:2003年11月30日
所属类别:
Q
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回答:
下面是算法大意:
(算法中的每一步都是保证可行的,且每一次调整都不涉及已经固定好了的元素)
-----------------------------------------------------------------------
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, 其他方面, 。
| |
|
|
| |
|
|