python大作业数独_Python中的暴力数独递归

我知道还有其他人也有同样的问题。我已经读完了所有这些,但仍然有问题。在

以下是我的递归代码: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递减。在

那么到底是什么问题?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值