拼图游戏

拼图游戏

 

      本文讨论如何判断拼图游戏中图形是否可以还原。

1是一个3X3的数字拼图

1

3

2

6

 

5

4

7

8

1

要还原成图2

1

2

3

4

5

6

7

8

 

2

      将问题一般化,在M*N的方格里有M*N-1个不同元素和一个空元素,只有空元素可以与上下左右相邻的元素交换位置。M*N方格中M*N-1个元素和一个空元素的位置确定一个图形。拼图游戏的问题是:一个图形经过一连串的交换能否得到另一个图形,如何得到。从交换方式的可逆性看出这种关系满足等价三性质,如果图形A通过交换变成图形B我们则称它们是等价的。把M*N-1个元素用1M*N-1编号,空元素编号0。然后展成一个排列。每个图形对应一个排列。确定了展开方式,图形和排列是一一对应的。这里用到的展开方式是行优先的顺序(其他方式展开也能到相应的结果)。将例1的两个图形展开有:图1对应1 3 2 6 0 5 4 7 8,图2对应1 2 3 4 5 6 7 8 0

      定理1图形A与图形B等价的充要条件图形A的排列的逆序数加上0元素行号和列号的奇偶性等于图形B的排列的逆序数加上0元素行号和列号的奇偶性。为方便表述,把图形排列的逆序数加上0元素行号和列号的奇偶性称为图形的奇偶性。

      先看定理1如何起作用,图1:展开的排列 1 3 2 6 0 5 4 7 8,它的逆序数为80元素行号为2,列号为2。逆序数加行号,列号的奇偶性为偶。图2:展开的排列 1 2 3 4 5 6 7 8 0,它的逆序数为80元素行号为3,列号为3。逆序数加行号,列号的奇偶性为偶。两个图形的奇偶性相同,根据定理1判断它们等价。

      首先证明必要性,即如果图形A图形B等价,则图形A的奇偶性等于图形B奇偶性。

              0元素和某个元素交换位置,则排列的逆序数的奇偶性就改变一次。交换后0元素的行号或者列号会加1或减1,即行号,列号之和的奇偶性也改变一次。这说明拼图的交换方式不改变图形的奇偶性,也说明拼图中至少有两组等价类,奇偶性不同的图形不等价。

      下面证明充分性,如果图形A的奇偶性等于图形B的奇偶性,则图形AB等价

      如果证明了拼图只有两组等价类,从必要性的证明过程可知,奇性图形是一组等价类,偶性是一组。从而证明了充分性。

      先考虑一般的排列1 2 3 ... N。某个元素连续与后面M相邻的元素交换位置,称为向后M步移动。如排列:1 2 3 4 5 6。元素2向后3步移动,排列变成1 3 4 5 2 6。同样的方式定义向前M步移动。如果排列A能够通过有限向前M步移动和向后M步移动变成排列B,称排列A与排列B M步等价。容易看出这也是等价关系。

      引理1任何一个1N的排列M步等价于1 2 ... N-M...)。括号里是N-M+1N某个排列

证明:如果N=M,这显然成立。

假设N=k时成立,下面证明k+1的情况。

1元素的位置记为i

情况1:假设i=1,显然,余下的元素减1,就变成N=k的境况,得证。

情况2:如果1<i<=M,则元素1前面的元素向后M移动,变为情况1

情况3如果i>M,则元素1有限次向前M步移动,使i1<=i<=M,可变成情况12

从而得证。
M=2时,只有两组等价类。由于移动不改变排列的奇偶性,从而奇排列是一组等价类,偶排列是一组等价类。


考虑N*M拼图
N=M=2,穷举法可证明只有两组等价类。

NM不同时为2时,设N不等于2(如果N等于2M不等于2可颠倒行列讨论)。

只考虑第二行最后一个元素是空元素的情形,因为空元素在其他位置总可以等价某个空元素在第二行最后一个元素的图形。不考虑空元素以之字形方式展开图形,即第一行最后一个数字和第二行倒数第二个数字相连。如:

1

2

4

3

5

 

3

展开成12453

下面证明两行拼图的交换方式可以实现排列的向前2向后2移动。

要实现元素a向前2步移动,则可顺着展开的方式循环移动拼图,使a在第一行第二列的位置,使空元素在第二行第二列的位置,此时可把元素i可与空元素对换。然后再沿着展开的顺序还原拼图。

例如:3的元素4向前2步移动。可以如下操作,

2

4

5

1

 

3

4

2

 

5

1

4

3

5

4

1

2

3

5

 

6

展开41253。实现了向前2步移动。

使i在第二行第二列的位置,使空元素在第一行第二列的位置可以实现向后2步移动。根据引理1及,两行拼图可以分成两组等价类。

假设M=k图形可以分成两组等价类,下面证明M=k+1

只需要证明任何M=k+1图形总等价于第一行元素为1 2 ... N的某图形即可。

如果这N个元素都在第一行,把空元素移到第二行,从上面的证明可知,交换两个不同的非空元素,图形的奇偶性改变,属于不同的等价类。N大于2,第二行就有两个非空元素可供交换。所以两行图形可以等价与第一行为1 2 ... N的某个图形。

如果1N的某个a元素不在第一行,设它在第i行。把空元素移动到i行,这样第i行和第i-1行可以看成M=2的图形。可以把a移动到第i-1行,并保证第i行和i-1行中1N的元素的行号不增加。有限步移动可以使1N元素全部在第一行。

显然M=k+1图形的等价类数目为2

充分性得证。

      拼图游戏的随机离散中加入定理1的判断可以保证游戏有意义,不会出现无解的情况。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pygame拼图游戏是一种基于Pygame库开发的经典拼图游戏,主要目的是将乱序的图像碎片重新拼接成完整的原图。与传统的拼图游戏相比,Pygame拼图游戏具有更加生动、立体和互动的特点。 在Pygame拼图游戏中,首先需要准备一张完整的图像。这张图像会被切割成若干个小块,然后随机打乱它们的顺序。游戏开始时,玩家需要通过点击空白块的周围块来移动块的位置,最终将它们按照原图的顺序拼接起来。 Pygame拼图游戏具有以下几个特点。首先,游戏界面以图像为基础,并且使用Pygame库中的相关函数来实现图像的加载和切割等操作。其次,游戏中的块可以通过键盘或鼠标来移动,提供了多种操作方式。此外,游戏还可以设置计时器和计步器,用于记录玩家完成拼图所花费的时间和步数。 Pygame拼图游戏的开发相对简单,但也需要一定的编程基础。开发者需要了解Pygame库的基本用法,如图像加载、事件监听、绘制等。在实现游戏逻辑时,需要设计算法来实现块的移动和碰撞检测等功能。此外,还可以添加音效和背景音乐等元素,提升游戏的趣味性和娱乐性。 总而言之,Pygame拼图游戏是一款简单而有趣的游戏,适合初学者学习Pygame库的使用,也能够提供娱乐和放松的体验。无论是对图像处理和游戏开发有兴趣的人,还是想挑战自己拼图能力的人,都可以尝试开发或者体验这款游戏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值