数字华容道,是在4x4的格子中,依次从左到右,从上到下放置1-15这15个数字。经过一定的随机,必须将这15个数字复原。每个数字只能向相邻的唯一空格移动。难度更高的,格子和数字会更多,比如5x5。

我在开发一个类数字华容道游戏时,发现自己3x3的格子,居然怎么都解不出来。比如:一排1、2、3,二排4、5、6,三排8,7。经过网上查询,才知道完全随机位置的数值华容道仅有50%的概率是有解的。而我就是用的完全随机方式去打乱次序。

网上有两篇文章说的很好,以下是根据这两篇文章的总结。

数字华容道必然有解的前提

首先,要弄清楚一个概念:逆序数。逆序数,即一个数字序列,将其中所有数字依次两两对比,若大数在前,小数在后,那么这就是一对逆序数。这里说到的逆序数,指的是数字序列中逆序数的数量。比如:上文提到的1、2、3、4、5、6、8、7,逆序数只有1个,即8和7。

另外,还有一点要提出来。一般来讲,复原状态(初始状态)的数字华容道,会有一个空格,一般会设置在最末行的右下角。但也可以根据实际的需求,设置在其他行。请留意,初始空格所在的行数,是决定是否有解的一个重要因素。

数字华容道,必然有解,只存在于如下3个细分情形:

若格子列数为奇数,则逆序数必须为偶数;

若格子列数为偶数,且逆序数为偶数,则当前空格所在行数与初始空格所在行数的差为偶数;

若格子列数为偶数,且逆序数为奇数,则当前空格所在行数与初始空格所在行数的差为奇数。

实际的推演涉及到我一时难以彻底理解的数学推算,我只能用浅显的方式来理解这个问题。

为什么?

首先,有解的前提在于:当前空格回到初始空格所在行数时,逆序数一定得是偶数!为什么,我不清楚。

要想把空格移动到初始空格所在行,必须进行若干次上下移动和若干次左右移动。

左右移动,不会改变逆序数;上下移动,若格子列数为奇数,则每次增减偶数个逆序数,若格子列数为偶数,则每次增减奇数个逆序数。

也就是说:

格子列数为奇数,怎么移动,都不会改变原始的逆序数。因为奇数加减偶数还是奇数,偶数加减偶数还是偶数。所以,只要保证逆序数是偶数即可,不必关心空格的位置。

格子列数为偶数,那么进行奇数次上下移动,会改变其逆序数的奇偶性。所以,如果当前逆序数是偶数,要想有解,就要保证实际上下移动会进行偶数次,也就是说空格所在行与初始空格所在行的差为偶数。

同理,若当前逆序数是奇数,要想有解,要进行奇数次的移动,才能保证最终逆序数是偶数。

如何转换逆序数奇偶性

具体实现应该很简单,不多说了,就说一点。如果想更改一个数字序列的逆序数的奇偶性,只需要调换一对逆序数的位置即可。

最后

可能是CS106A课程上的一句话,并不是原文:

程序员要在不理解内在实现逻辑的情况下,也能顺畅地使用别人的成果。

不理解没关系,会用就行。

参考文档:

华容道3x3的技巧_数字华容道怎样才能有解相关推荐

  1. 华容道3x3的技巧_数字华容道——无上限解题技巧

    之前就听过数字华容道,但是一直没有上手,今天发现室友再玩,我就下了一个,试了一下3X3 26秒,挺简单的 有玩了下5X5 说实话,前面3行很顺利,但是最后2行就比较"碰运气" 以及 ...

  2. 华容道3x3的技巧_我发现总结的关于数字华容道的技巧规律

    数字华容道,一个很有趣的游戏,就是在一个n阶数字阵里,只有一个空格,位置打乱,让重新按顺序排好.自己做着做着,发现可以有方法规律,并且百用百顺,就总结并拿出来和大家共同分享探讨:一行一行的弄顺, 拿四 ...

  3. 华容道3x3的技巧_华容道游戏秘决技巧

    玩法:就是通过这两个小空格移动棋子,曹操移出华容道(也就是把最大的那个滑块移到最下方中央位置).滑块游戏华容道,又名捉放曹,古老的中国游戏,以其变化多端.百玩不厌的特点与魔方.独立钻石棋一起被国外智力 ...

  4. 华容道6×6图解_数字华容道玩法图解介绍 世界纪录是多少秒

    数字华容道怎么玩?怎么摆都有解吗?今天第六手游网小编将给大家带来详细资料,接下来让我们一起来看看吧! 数字华容道技巧规律 数字华容道,一个很有趣的游戏,就是在一个n阶数字阵里,只有一个空格,位置打乱, ...

  5. 15数字华容道解法 图解_数字华容道最后一行技巧数字华容道教学步骤

    数字华容道最后一行技巧是先把上一排的按顺序往下转,上一排不要打乱,当把最后一排的数字转上一部分去时,找准顺序插下来,一直转到最后一排的顺序也是正确的,再复原就可以了.数字华容道就是将1-15这15个数 ...

  6. 15数字华容道解法 图解_数字华容道最后一行技巧 数字华容道教学步骤

    数字华容道最后一行技巧是先把上一排的按顺序往下转,上一排不要打乱,当把最后一排的数字转上一部分去时,找准顺序插下来,一直转到最后一排的顺序也是正确的,再复原就可以了.数字华容道就是将1-15这15个数 ...

  7. 15数字华容道解法 图解_数字华容道攻略(数字华容道最快解法图)

    数字华容道有何解法? 4*4基本在一分钟左右,最快一次32秒.5*5.6*6还没测.4*4太简单,我就简单说一下了,后面5*5和6*6比较详细.4*4: 首先还原前两行.然后把9到12按下图...下面 ...

  8. 15数字华容道解法 图解_数字华容道解法图解 数字华容道玩法介绍

    数字华容道,一款全新的经典的益智类型数字APP.目的是用最少的步数,*短时间将棋盘上的数字方块,按照从左到右,从上到下的顺序重新排列整齐.以往华容道游戏基于三国背景,需将棋子移动到出口.现在以数字为形 ...

  9. C语言开发数字华容道实现,从技术角度实现实现数字华容道

    目的 上周新一期的最强大脑出来了,虽然上季被称为最强黑幕,不过呢.我决定还是看看= =.它里面第一关是叫做数字华容道.说白了,就是和拼图差不多.一开始我准备下一个玩玩的.结果没搜到.所以决定写了一个. ...

最新文章

  1. hdu 6034 B - Balala Power! 贪心
  2. Py之demjson:Python库之demjson的简介、安装、使用方法详细攻略
  3. 要闻君说:5G手机真的来了?TCL转型科技企业!鹅厂云部门发布态势报告, DDoS攻击正式进入Tb时代!天上“跑”起出租车?...
  4. 安卓案例:闪烁满天星
  5. java8-Optional
  6. MongoDB 表结构分析工具介绍 -- Variety
  7. IP地址是如何分配的
  8. LintCode 交叉字符串
  9. 51单片机数码管闪烁c语言,AT89C51单片机数码管闪烁问题怎么解决
  10. 计算机找不到家庭网络连接,电脑找不到家里的wifi无线网络怎么办?
  11. tortoise-orm 分页码(python)
  12. 为Android购买多个改装微信,安卓版微信带来超级重磅更新 微信终于开放账号ID修改功能喽(就是限制略多)...
  13. 码率、帧率和I B P帧
  14. 宝藏又小众的灯罩VRay材质球素材网站分享
  15. Android Wi-Fi Regulatory domain controlle the channel(以QCOM平台为例)
  16. 【转载】微信公众平台发展趋势猜想
  17. Failed to introspect Class FeignClientFactoryBean 异常排查
  18. 交换机SNMP V3版本配置
  19. pip更换源,换成国内镜像
  20. ajax:php数组数据类型

热门文章

  1. bootstrap日期插件的使用示例
  2. 史上最强超融合入门干货:超融合与传统架构特性及收益详细对比
  3. 手把手,嘴对嘴,讲解UCOSII嵌入式操作系统的任务调度策略(一)
  4. SQLiteStudio
  5. 随机爬虫下载视频(附带教程与源码)
  6. 红黑树的创建+线索化+性质检验+笔画输入法
  7. 如何产生一个高频振荡电路?
  8. 利用反射整合ViewBinding和ViewHolder
  9. Ubuntu12.04下安装CodeBlocks16.01和汉化
  10. matlab 微波仿真,MATLAB电磁场与微波技术仿真