piapia123
zh

数独求解与生成

转换

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

三种用法:求解、校验、生成新题。求解用回溯加候选数位掩码,并可选列出每一步用了什么策略(唯一候选数 / 隐性唯一 / 试填回溯)。校验会指出同一行、列、宫里重复的数字具体出现在哪几行几列,并判断是唯一解、多解还是无解。生成从完整解里随机挖空,每挖一个都验证仍唯一,所以给出的题保证只有一个答案。 ⚠️ 生成走 lib/random.ts 的随机源,绝不用 Math.random;填一个种子就能复现同一道题。 全部在浏览器本地完成,不联网、不上传。

功能

  • 粘贴 9 行数独即可求解,. 或 0 表示空格,也认 81 字符紧凑串
  • 可选列出解题步骤,并标明每一步用的是哪种策略
  • 校验盘面:指出重复数字所在的行、列、宫与具体格子
  • 判断唯一解、多解(至少 2 个)还是无解,数到 2 就停、不穷举
  • 生成新题,从完整解随机挖空且每题验证唯一解
  • 三档难度:简单 / 中等 / 困难
  • 填一个种子即可复现同一道题
  • 非法输入与重复数字会指到具体第几行第几列
  • 全部在浏览器本地完成,数据不上传

使用方法

  1. 选模式:求解 / 校验 / 生成新题
  2. 求解或校验:粘贴 9 行数独,每行 9 格,. 或 0 表示空格
  3. 生成:选难度,需要时可填一个种子
  4. 结果实时出现,可逐行复制

常见问题

怎么判断一道题是不是唯一解?
用回溯搜索,但数到 2 个解就停 —— 空盘约有 6.67×10²¹ 个解,穷举完是几个世纪的事。对「是不是唯一」这个问题,0 / 1 / 至少 2 三种结论已经够了,所以不必把解全部列出。
生成的题为什么保证唯一解?
生成时从完整解里随机挖空,每挖掉一个数字就立刻用上面的计数器验证「是否仍唯一解」,不唯一就把这个格子填回去。没有这一步的话,用户会碰到「看起来能做、其实有多个答案」的题。
解题步骤里的三种策略是什么意思?
唯一候选数:这一格只剩一个可能的数字。隐性唯一:某个数字在这一行(或列、宫)里只可能落在一格。试填(回溯):两种直接法都推不动了,先假设一个数往下走,走不通再退回来。
为什么求解时输入有重复数字会直接报错?
因为带重复的盘面根本无解,继续算只会得到一个「无解」的结论,而真正的问题是那几个重复的格子。所以工具直接指出重复出现在第几行第几列。

相关工具