原文出处:https://www.jianshu.com/p/1c1849d876b2
此文还未仔细研究验证,先mark下:
  数字华容道,是在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个细分情形:

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

实际的推演涉及到我一时难以彻底理解的数学推算,我只能用浅显的方式来理解这个问题。
  为什么?
  首先,有解的前提在于:当前空格回到初始空格所在行数时,逆序数一定得是偶数!为什么,我不清楚。
  要想把空格移动到初始空格所在行,必须进行若干次上下移动和若干次左右移动。
左右移动,不会改变逆序数;上下移动,若格子列数为奇数,则每次增减偶数个逆序数,若格子列数为偶数,则每次增减奇数个逆序数。
  也就是说:
  1.格子列数为奇数,怎么移动,都不会改变原始的逆序数。因为奇数加减偶数还是奇数,偶数加减偶数还是偶数。所以,只要保证逆序数是偶数即可,不必关心空格的位置。
  2.格子列数为偶数,那么进行奇数次上下移动,会改变其逆序数的奇偶性。所以,如果当前逆序数是偶数,要想有解,就要保证实际上下移动会进行偶数次,也就是说空格所在行与初始空格所在行的差为偶数。
  3.同理,若当前逆序数是奇数,要想有解,要进行奇数次的移动,才能保证最终逆序数是偶数。

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

【转】数字华容道怎样才能有解相关推荐

  1. 华容道3x3的技巧_数字华容道怎样才能有解

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

  2. 数字华容道算法生有解

    数字华容道NxN数字随机排列的阵列有解的充要条件是: N为奇数,总逆序数为偶数, N为偶数,总逆序数为奇数. --数字华容道算法2*2-10*10 --随机生成有解算法 --作者,韩永旗 --迷你号2 ...

  3. 15数字华容道解法 图解_数字华容道最后一行怎么解 最后一道解答技巧

    数字华容道的基本解法思路就如同魔方解法-样,下面开始教学步骤,先对第一排,将1.2.3一个个移到目标位置,这一步不需要什么技巧,只管将三个数字-个一个移就行,其它数字不用管. 在移数字4时先移到目标位 ...

  4. egret制作小游戏:数字华容道及有解判断(代码注释)(评论区有源码下载~)

    继续学习egret,最近写了数字华容道的小游戏,非常简单的小游戏.首先预览一下效果: 数字华容道就是通过移动方块,将方块按照数字的排序进行排列.功能很简单,主要有刷新,提升阶数,如何一定有解,以及简单 ...

  5. python数字华容道算法_用React写一个数字华容道,你需要知道的秘密

    还在上班?很无聊? 这个叫前言 年末了.哦,不,要过年了.以前只能一路站到公司的我,今早居然是坐着过来的.新的一年,总要学一个新东西来迎接新的未来吧,所以选择了一直未碰的那个据说是全宇宙最牛逼的前端框 ...

  6. 微信小程序 《数字华容道》

    简单的做了个数字华容道的小游戏,大概长这样 页面有点简单,但是大概的功能应该差不多都有了. 这个小游戏的难点主要有两个: ① 如何移动? // 移动算法 isPass: false, // 是否通关 ...

  7. Android开发 之《最强大脑》“数字华容道”

    文章目录 0 背景 0.1 游戏介绍 1 结构 2 定义棋盘和棋子 1.0 棋子 2.1 棋盘属性 2.2 排列棋子 3 生成棋局 4 游戏过程 5 高分榜 6 作弊&后记 0 背景 最近看& ...

  8. 看最强大脑的数字华容道,尝试理解与总结

    目录 前言 华容道起源 简介 发展 华容道解法 横刀立马解(最少步数) 数字华容道 界面 解法前言 定理 定理解释 针对定理的证明 正解解法细分3种(非官方定义,都是按照自己摸索和理解定义的) 第一种 ...

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

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

最新文章

  1. 利用Cache,asp.net 简单实现定时执行任务
  2. 论文阅读——《Exposure Control using Bayesian Optimization based on Entropy Weighted Image Gradient》
  3. HTTP中302与301的区别以及在ASP.NET中如何实现
  4. GroupCoordinator分析
  5. 关于TagHelper的那些事情——自定义TagHelper(内嵌TagHelper)
  6. 关于类的入门例子(1): 继承窗体
  7. Java项目Lombok
  8. vue实现php传数据,vue+props传递数据怎样实现
  9. mysql外部排序算法_「干货总结」程序员必知必会的十大排序算法
  10. 第二部分 Automake的标准工程组织
  11. sysbench tpcc-mysql_MySQL压测sysbench/tpcc
  12. 各行各业,各种资源,淘宝售卖的各种资料,全部分享了 !
  13. 最新大数据资料合集.pdf
  14. ensembl-vep/VEP 注释软件安装及测试 超简单版(conda vep、百度网盘数据库)
  15. android aar的打包引用和解决间接引用异常
  16. 极简文艺的浏览器主页推荐,无广告,文艺又清新的网址导航
  17. RBD存储模式为RWX时kubernetes多次挂载该PV不报错
  18. 笔记:Spring基础
  19. 斗鱼虎牙合并:从内耗走向一致抗敌
  20. 18个顶级的腾讯qq技巧

热门文章

  1. C语言中定义bool类型
  2. D5周报|第8期:D5画质优化版本即将上线;3Ds Max 工作流插件重构内测、Revit 工作流教程
  3. (转)SSE,MSE,RMSE,R-square指标讲解
  4. encrypt 加密解密
  5. 程序员 论坛 常见 英文缩写
  6. oracle优化器统计信息相关
  7. 怎样能把文字变成语音
  8. android:stretchColumns什么意思
  9. 用Java--零钱通的两种实现
  10. 考研党特有的错觉,你中了几个?