拼图游戏的算法分享
这里提到的拼图游戏,指的是类似3*3格子的框框,8个拼图移动拼成还原成原始的图片。
经过我一段时间的摸索。。目前总结出了2种拼图算法,与大家分享~欢迎拼图达人一起探讨~
第一种算法:旋转法。
这种方法规则最简单,整个完整的拼图,其实是可以连接成一条长龙,这条长龙可以顺着顺时针或者逆时钟旋转。
这个算法的原理就是:将中间的格子作为一个寄存拼图的架子,所有拼图围绕中间的拼图旋转,将整个拼图接成一条长龙。
假设正确拼图如下:
1 2 3
4 5 6
7 8
如果转换成一圈的长龙,就是
1 2 3
4 6
7 5 8
目前拼图如下:
1 3 4
2 5 7
8 6
我们的目标就是将这个图通过旋转,拼成上面那样的长龙。
第一步,我们要把2接在1后面,那我们将2寄存到中间的位置,6右5下2右,变成:
1 3 4
8 2 7
5 6
第二步,顺时针旋转外围拼图56743,留出1后面的空位,给2预备
1 3
8 2 4
5 6 7
第三步,接龙,2上将2移到1后面。
1 2 3
8 4
5 6 7
接下来每个拼图都如此操作。目前3已经自然接好,那接下来3下面接的是6,6上,把6“寄存”到中间的格子。
1 2 3
8 6 4
5 7
因为6要接在3的后面,所以向逆时针旋转整个拼图2次,第一次逆时钟58123,第二次逆时针4758123,留出3后面的空位,变成
3 4
2 6 7
1 8 5
继续接龙,6上,将6接到3后面,变成
3 6 4
2 7
1 8 5
现在龙已经接了4个了,继续接,8跟在6后面,将8移入中间的格子“寄存”,外围继续逆时钟旋转
3 6 4
2 8 7
1 5
逆时钟旋转1236
6 4
3 8 7
2 1 5
接龙
6 8 4
3 7
2 1 5
接下来8左边是接5,这个旋转的过程比较多,要注意的是,旋转过程,已经接好的龙不要再动,只旋转,不拆分。
6 8 4
3 7 5
2 1
8 7 4
6 5
3 2 1
4下7右5上,继续往下接
8 5 7
6 4
3 2 1
好了,现在看到了吗?
整条龙已经接好了!可以逆时针旋转4次,就是
1 2 3
4 6
7 5 8
然后5上8左
1 2 3
4 5 6
7 8
大功告成~
所有的拼图都可以以这样的“寄存”,接龙的方式拼成一条长龙,然后经过几次旋转就可以恢复成正确的拼图。刚开始玩的时候算法不熟悉的时候会比较慢,但是到了熟悉了之后就会越来越快,用这个算法,熟练的话可以打过第6关
上面这个过程是旋转法最基础的做法,我们的目的其实是接龙,而不是旋转,所以不是所有的拼图都一定要移动到中间,旋转接龙的,只要通过移动,可以接到一起 的方式都行。要注意的是,旋转过程,已经接好的龙就不要再拆开。熟练之后,顺时针逆时针的方向旋转都可以接龙,2边同时接。
第二种算法: 交换法
交换法是一个交换两张对调了的拼图的算法,整个算法类似倒车入库。要熟练应用会比旋转法难一点。但是拼图要往高级的打,就一定要会这个算法。。
我们还是以上面的拼图为例开始:
1 3 4 1 2 3
2 5 7 =》目标 4 5 6
8 6 7 8
交换法是先完成第一行,123,目前这个要完成123较为简单。7下5右2右,变成
1 3 4
2 5
8 6 7
867543逆时针旋转
1 3
8 2 4
6 7 5
2上,最上面的一行123就完成了,接下来简化起见,我们隐藏掉123,进行排序
8 4
6 7 5
接下来是要完成最左边的一行,即4,7要归位。4,7如果归位,那么剩下的3个拼图只要旋转几下就可以归位了。所以核心就在于4,7如何归位。
目前这种情况,比较简单:
7上6右变成
8 7 4
6 5
8下,7左,4左变成
7 4
8 6 5
然后就简单了,5上6右8右。
7 4 5
8 6
7下4左。好了,74归位。整个拼图就完成了。
在很多情况下,交换法会比接龙更节省步数,因为接龙法需要移动所有拼图。上面这种情况比较简单,体现不出交换法的精髓,我们再造一个局:
7 8
4 6 5
这种情况是4,7对调,你会发现一直转来转去,74都对调不过来。交换法的精髓就是以退为进能的借位
首先将4移动到现在5的位置:
6上4左:
7 6 8
4 5
7下6左8左:
6 8
7 4 5
5上4右8下: 这一步是交换法的精髓所在,将连在一起的4,7切断
6 5
7 8 4
6右7上,7归位
7 6 5
8 4
8左4左,5下6右,现在让出位置,让47重相逢,但是原先相逢的时候4是在7下面的,但是这次的相逢,4是在7的右边
7 6
8 4 5
再次相逢
7 4 6
8 5
感觉是不是眼熟了呢?没错,就是刚刚旋转法一开始的做法。
8右7下4左,47归位完成
4 6
7 8 5
这是我目前已知的2种算法。。这2种算法融会贯通的用,打出高分就不是问题~
受教了,学习完这个,以后玩拼图再也不会晕头转向了!!!