数独应用中的冲突校验:从规则到实现与测试

举报
yd_232780779 发表于 2026/11/03 11:00:56 2026/11/03
【摘要】 数独是一个适合练习状态管理与约束校验的小项目。本文整理实现 9×9 棋盘时可以采用的基础思路,供学习参考。一、如何表示棋盘可以使用 9×9 的二维数组保存数字,约定 0 表示空格。将题目给定的数字与用户输入区分保存,界面据此禁止修改题目中的固定格。用户每次输入后,先更新对应格子,再根据当前棋盘计算冲突状态。二、行、列和宫的校验对于位置 (r, c) 的非零数字 v,需要检查同一行、同一列,以...

数独是一个适合练习状态管理与约束校验的小项目。本文整理实现 9×9 棋盘时可以采用的基础思路,供学习参考。


一、如何表示棋盘

可以使用 9×9 的二维数组保存数字,约定 0 表示空格。将题目给定的数字与用户输入区分保存,界面据此禁止修改题目中的固定格。用户每次输入后,先更新对应格子,再根据当前棋盘计算冲突状态。


二、行、列和宫的校验

对于位置 (r, c) 的非零数字 v,需要检查同一行、同一列,以及它所属的 3×3 宫中是否有另一个相同数字。宫的起点可由 Math.floor(r / 3) * 3 和 Math.floor(c / 3) * 3 得到。遍历时要跳过当前位置,也要忽略值为 0 的空格。若任一方向发现相同数字,就将该格标为冲突。


三、用集合简化判断

如果要一次检查整个棋盘,可以分别为每行、每列和每个宫建立集合。按格遍历时,检查数字是否已经出现在对应集合中;出现重复时记录冲突位置,否则加入集合。宫的编号可以写成 Math.floor(r / 3) * 3 + Math.floor(c / 3)。记录位置时也要标记第一次出现的格子,才能让界面同时提示两个冲突项。


四、完成判定和输入反馈

棋盘填满并且没有行、列、宫冲突,才满足基础的完成条件。输入不合法时应给出清晰提示,例如限制输入 1 到 9、允许清空,并用文字或图标辅助颜色提示。每次输入后重新检查 81 个格子对普通数独应用通常足够简单,也更便于调试。


五、测试和保存

可以分别测试同一行重复、同一列重复、同一宫重复、空格、修改原有数字以及完整正确棋盘。保存进度时应同时记录题目和用户输入;恢复后再次校验数据,避免损坏的存档造成异常。以上方法适用于多种界面框架,具体持久化接口和状态更新方式应以所选平台文档为准。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。