java - Java 中的数独板生成逻辑

标签 java arrays sudoku

我想制作一个程序,可以随机生成一个数独板来玩。对于那些不熟悉该游戏的人,您将获得一个 9x9 的游戏板,其中大部分是空白区域和一些预先填充的数字。要完成它,您必须填充空白方 block ,以便每行、每列和 3x3 中有 1-9正方形,但只能一次。

我目前想象的方式是使用二维数组。我在 for 循环中使用 for 循环来填充它,确保进入正方形的数字永远不会是已在同一行或列中使用过的数字。

我遇到的问题是如何检查该数字是否已在网格的 3x3 部分中使用。我正在考虑使用 3d 数组,第三维是存储 3x3 数据的位置,但我不知道一种简单的方法来决定为当前正方形 checkin 哪个数组。

我也不确定以我的方式随机生成图 block 是否总是会生成完整的棋盘。我担心它可能会到达最后几 block 瓷砖之一,并发现 1 到 9 之间的数字无法放入正方形,因为它已被使用。我不知道如何检查这是否有可能。

我确实少量查看了有关该主题的其他问题,但我不想意外地找到答案,我只需要一个指向正确方向的指针。而且它们似乎都与我要问的内容没有直接关系。

希望我的问题是有意义的,用文字描述有点困难。如果您能在不给我答案的情况下给我指出正确的方向,我将不胜感激。另外,如果您对数独不太了解(为什么点击这个问题),您可以在这里玩: http://www.websudoku.com/ 如果您需要澄清,我会尽快回复评论。

最佳答案

我会尝试只给您一些提示,而不是直接给您答案。

首先,使用二维数组是个好主意——这正是数独板。至于你的 3d 阵列想法,它有点过于复杂。考虑使用数学函数找到每个 3x3 框的顶角(即 [0, 0]、[0, 2]、[2, 0] 等),并使用 for 循环遍历该 3x3 框(仍在二维数组)。至于通过随机输入数字来生成棋盘,它可能行不通,并且只要您希望每个棋盘只有一个正确的解决方案,棋盘生成可能并不像您想象的那么简单。确保您可以先检查主板有效性,然后查看 kenshinji 发布的链接。

关于java - Java 中的数独板生成逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38175683/

相关文章:

java -\G 在 PCRE 后视中如何工作

java - 动态加载的类无法访问Applet加载的类

php - 我如何添加+号

java - 计算给定数独谜题的解数?

c - 多线程数独求解器

c++ - 我的数独解算器功能有什么问题?

java - 如何从 MYSQL 存储过程调用 Java 文件?

java - Struts 2 - 升级后 Controller 映射错误

arrays - 如何用不同数组中的另一个项目替换数组中的一个项目?

python - Numpy 零和字符串数据类型