Java中的数独板生成逻辑

时间:2016-07-04 01:01:29

标签: java arrays sudoku

我想制作一个随机生成数独棋盘的程序。对于那些不熟悉游戏的玩家,你会得到一个9x9的游戏棋盘,其中大部分都是空的空间和一些预先填好的数字。要完成它,你必须填写空方块,这样每行,每列和3x3都有1-9个广场,但只有一次。

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

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

我也不确定是否按照我的方式随机生成瓷砖将始终生成完整的电路板。我担心它可能会到达最后几个瓷砖中的一个并且发现1到9之间的数字不适合广场,因为它已经被使用了。我不知道如何检查这是否可能。

我确实做了很少的关于这个主题的其他问题,但我不想偶然遇到答案,我只需要一个指向正确方向的指针。也没有一个似乎与我的要求直接相关。

希望我所要求的是有道理的,在文本中描述有点困难。如果你能给我一个正确方向的指针而不给我答案,我将不胜感激。此外,如果你不太了解数独(你为什么点击这个问题),你可以在这里播放: http://www.websudoku.com/ 如果您需要澄清,我会尽快回复评论。

1 个答案:

答案 0 :(得分:1)

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

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