我正在尝试创建自己的普通 9x9数独游戏。
我将问题分为两部分-
- 创建一个完全填充的数独,和
- 从网格中删除不必要的数字
现在,我坚持第一部分。
这是我简要使用的算法:
a)首先我选择一个数字(比如1),生成一个随机单元格位置,如果
- 该单元尚未被占用,并且
- 如果该行还没有编号,并且
- 如果该列还没有编号,并且
- 如果 3x3 框还没有编号
b) 现在我检查一种情况,即在一行、一列或一个框中,只有一个地方是空的,然后我填写
c)我检查是否有一个数字不存在于一个框中,但存在于同一行和同一列的框中(我在这里谈论的是 3x3 框),数字的位置是固定的,我填写它.
d) 我重复上述步骤,直到每个数字在网格上出现九次。
我面临的问题是,我经常遇到这样的中间情况:
0 1 0 | 0 0 3 | 0[4/2]0
0 [2] 0 | 0 [4] 1 | 3 0 0
3 0 [4]|[2] 0 0 | 0 0 1
---------+---------+---------
2 0 3 | 0 5 4 | 0 1 0
0 0 1 | 3 0 2 |[4] 0 0
0 4 0 | 0 1 0 |[2] 3 0
---------+---------+---------
1 0 2 | 0 3 0 | 0 0 [4]
4 3 0 | 1 0 0 | 0 0 [2]
5 0 0 | 4 2 0 | 1 0 3
看到写有 [4/2] 的地方了吗?由于标有 [] 的框,那是 2 和 4 的位置。
我能做些什么来避免陷入这种情况(因为这种情况是一个僵局 - 我无法继续前进)