【发布时间】:2015-01-19 17:04:23
【问题描述】:
我尝试使用 Python 实现蛮力解决数独难题,如以下链接中所述:http://en.wikipedia.org/wiki/Sudoku_solving_algorithms#Brute-force_algorithm
我知道还有其他线程有同样的问题。我已经阅读了所有这些,但仍然遇到问题。
这是我的递归代码:
def recurse(x, k, grid):
if x > 8:
for line in grid:
print line
raw_input()
if grid[x][k] == '0':
for number in '123456789':
if clear(number, x, k, grid):
grid[x] = grid[x][0:k] + number + grid[x][k+1:]
k += 1
if k > 8:
x += 1
k = 0
recurse(x, k, grid)
k -= 1
if k < 0:
x -= 1
k = 8
else:
k += 1
if k > 8:
x += 1
k = 0
recurse(x, k, grid)
基本上,我将数独保存在一个 9x9 插槽的数组中,其中 grid[x] 访问整个数独的第 x 行,而 grid[x][k] 访问第 x 行的第 k 个数字。
上面有一个名为“clear”的函数,它可以确定某个数字是否可以放入该插槽。我已经对其进行了多次测试,并且可以正常工作。这里的问题是“x”的值永远不会超过 8,这意味着数独永远不会到达终点。在正确填充所有插槽之前,递归停止。我在编写递归方法方面非常缺乏经验,所以请多多包涵。
我想,如果一个数字适合一个槽,那么这个数字就会放在那个槽内,然后 k 递增。如果 k 大于 8,则意味着它是行尾,所以我们跳到下一行。然后再次调用递归函数。如果递归函数结束而无法再次调用自己,那么这意味着没有数字适合该插槽,因此我们必须返回。在这种情况下,k 递减。
那么这里到底有什么问题呢?
【问题讨论】: