[编程题]求滑动拼图的最佳解 (难啊!!!!)

fins 2003-12-19 03:07:26

所谓滑动拼图就是 把一图片切割成n*n个矩形 然后拿走一块,把剩下的打乱,通过滑动,把图像复原.

现在把一图片分成3*3 共9块,现在把左上角一块拿走,把剩下的8块打乱,进行复原.
请设计一程序,对于给出的剩余8块的任何一种排列,都可求出最少要走几步能把图片复员.并演示出整个复原过程.

说白了就是要求做一个可以用最佳方法完成3*3的滑动拼图的程序.

看似简单 其实不然啊

要用到各种数据结构 人工智能
我是不行
请高手指点!!!
...全文
311 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fins 2003-12-21
  • 打赏
  • 举报
回复
这是8数码问题
有方法能解
我手头也有源代码
我希望有人能分析一下
用的是人工智能的*A搜索方法
ZhangYv 2003-12-21
  • 打赏
  • 举报
回复
用A*,经典的问题
ningzhiyu 2003-12-21
  • 打赏
  • 举报
回复
BinaryWorld 2003-12-21
  • 打赏
  • 举报
回复
AI里面有过这样的算法。

楼上的我只听说过A*算法,没有听说过*A算法。

把每个分割后的图形都分有一个编号。例如:分为9个图形,则最早图形的顺序是
1,2,3,
4,5,6,
7,8,9

然后把次序大乱,最后排到这个次序,作为终态。


运算式法则:
打乱后的终态每个数字距离应该位置用ni表示
例如:
2,3,1
7,9,8
6,4,5

那么第一个数字2距离应该位置是1。

每次移动的法则是:如果空格的上边不是边,可以向上移动
如果空格的下边不是边,可以向下移动
如果空格的左边不是边,可以向左移动
如果空格的右边部是变,可以向右移动

每次移动后,统计当前的偏移结果,如果得到的值比上一次小,则移动操作正确,如果有增加就表示移动操作失败,重新移动。

这样一定能得到最后结果。

这个方式是AI里面的最基本算法,所有的题目都可以用类似的方法来解决。楼上的说的A*算法应该算比这个高难度的了。

如果楼上的有兴趣,可以联系我binaryworld@163.com

wildcat1984 2003-12-20
  • 打赏
  • 举报
回复
有一个方法叫做最小耗费搜索法,可以解决.
可是我基本上不会用.这种问题叫15迷问题,
你可以搜搜看
wongsung 2003-12-20
  • 打赏
  • 举报
回复
backtracking + branch & bound
ftp123 2003-12-19
  • 打赏
  • 举报
回复
这个题目只有两种方法:
1.穷举,然后比较.
2.找出规律,因为还没有敢说他的智商高到敢说自己玩拼图时所走的步全都是最精简的.
hu1hao2 2003-12-19
  • 打赏
  • 举报
回复
先去玩玩拼图游戏吧,找些规律。先实现一块的移动方法,再两块的,三块,慢慢来,这个比较难。我还准备做一个猜数字游戏的智能算法,没有时间。
fins 2003-12-19
  • 打赏
  • 举报
回复
斑竹啊

我看这题比 <程序员> 里的那些编程题目难多了

能不能置顶啊

大家如果没有 最优解(滑动次数最少),那随便给个能解的也可以啊!
谢谢高手了!!!!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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