为什么有些华容道无解:逆序数与奇偶性
用读盘顺序、逆序数例子和合法移动的奇偶性变化,推导奇数阶与偶数阶数字华容道的可解条件,并说明为什么只交换两块可能无解。
更新于 2026-11-13
标准目标下,奇数阶数字华容道可解,当且仅当逆序数为偶数。偶数阶则要把逆序数与空格从底部数起的行号相加,和为奇数才可解。
先约定目标和移动规则
这里的标准目标是数字从左到右、从上到下递增,空格在右下角;每次只让与空格共边的数字进入空位。若目标换成别的排列,应当相对那个目标比较,不能不看终点直接套公式。
奇偶性指整数是奇数还是偶数。可解条件判断的是起点与终点是否属于同一类可达排列,不是难度评分。看起来只差一点的盘可能无解,打乱很远的盘也可能可解。视觉距离与数学可达性是不同问题。
逆序数到底怎么数
把棋盘按从左到右、从上到下读成一串数字,跳过空格。前面的数字比后面的某个数字大,这一对就算一个逆序。必须看所有前后配对,不只看紧邻数字,也不只统计放错位置的块。
例如“一、三、二、四”只有“三在二前”这一对,逆序数为一。“三、一、二、四”有“三在一前”和“三在二前”两对,逆序数为二。实际计算可以依次选一个数字,数它后面比它小的数字有几个,再把这些数量相加。
跨行的配对也要算,因为读盘后整盘成为一条序列。空格不要当零加入比较,否则你统计的就不是下面推导使用的逆序数。
为什么奇数阶只看逆序数
先看横向滑动。它只交换空格和旁边数字;读盘时跳过空格,所有数字之间的相对先后不变,所以逆序数不变。
再看竖向滑动。设棋盘宽度为 n,目标数字在读盘序列里会跨过 n−1 个其他数字。每跨过一个,它与那个数字的前后关系翻转,所以逆序数的奇偶变化取决于 n−1 的奇偶。
当 n 为奇数时,n−1 为偶数,一次竖向移动翻转偶数对关系,逆序数奇偶不变。横向也不变,因此任何合法移动都保持逆序数奇偶。标准目标没有逆序,是偶数,所以起点为奇数逆序时不可能到达目标。
对通常的一空格方形数字华容道,这个条件也是充分条件:偶数逆序的排列属于目标所在的可达类,不只是“暂时没被排除”。
偶数阶为什么还要看空格行
当 n 为偶数时,n−1 为奇数,一次竖向移动会翻转逆序数奇偶。同时空格上下移动一行,从底部数的行号也改变奇偶。两个量一起翻转,所以它们的和仍保持原来的奇偶。
横向移动既不改变逆序数,也不改变空格所在行。因此“逆序数加空格底部行号”的奇偶,对所有合法移动都不变。标准目标逆序数为零,空格在底部第一行,和为一,即奇数,所以起点也必须是奇数和。
| 棋盘宽度 | 空格从底部数的行号 | 所需逆序数 |
|---|---|---|
| 奇数 | 任意 | 偶数 |
| 偶数 | 奇数 | 偶数 |
| 偶数 | 偶数 | 奇数 |
两个接近完成却无解的例子
把三阶目标中的七和八对换,其他不动。只有“八在七前”一个逆序,宽度为奇数,逆序数为奇数,因此无解。不是因为最后两块难转,而是任何合法滑动都无法改变这个类别。
把四阶目标中的十四和十五对换,空格仍在右下。逆序数为一,底部行号为一,和为偶数,也无解。这里如果漏看空格行,或者从顶部数却没有修改公式,就很容易判断反。
正常滑动不会把可解盘变无解
从目标出发只用合法滑动打乱,倒着走就能还原,所以一定可解。解题时绕远、暂时打乱已完成区域,不会改变可解性。若局部收尾困难,优先检查自己的分层保护条件,可能是某个过早固定的数字需要释放,不代表全盘突然无解。
去哪里玩
一格华容道 在 HarmonyOS 提供可解的数字滑块棋盘,尺寸从 3×3 到 6×6。战役提示可以帮助研究路线;逆序数尤其适合判断手动摆出的局面,而不必把所有卡住都归因于无解。