poj2893——八数码引出的一系列发人深省、丧心病狂的问题

八数码游戏是在一个3*3的网格中进行的,有一个空格和1~8这8个数字。就像“捉放曹”一样,你可以交换数字与空格(如果他们是相邻的)。

现在,作为OIer的我们,有必要去探究更加宏观的问题——m行n列的数码游戏。

Solution

我们定义一个网格的奇偶性为,其按顺序从左到右逐行扫描得到的数列中,其逆序对数的奇偶。

空格左右移动是不会更改奇偶性的。但空格上下移动就需要讨论了。

上下移动对于序列的影响就是,把x前移n-1次。若这n-1个数里,有a个比x小,b个比x大(不可能等于,且满足a+b = n-1),那么,初状态逆序对为b,末状态为a,相当于总体增加了a-b(若a<b则表明是减少)。

于是我们展开讨论,若n为偶数,那么n-1为奇数,所以——a,b奇偶性不同=>a - b为奇数=>网格奇偶性改变。宏观来看,假设0位置一开始处于第i行,根据规则,0最后要处于第m行,总位移为m-i。即是要m-i次改变奇偶性。

只要网格奇偶性相同,就可以互相转化。(奇偶性相同为充要条件,其必要性十分容易说明,但充分性...原谅我弱)

而末状态逆序对数为0,偶。得出结论:n为偶数时,初始逆序对数 + m - i若为偶数,Yes;若为奇数,No。

n为奇数时较容易,因a,b同奇偶,则初状态逆序对数只要为偶,Yes;反之,No。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值