我刚刚开始使用python,所以如果这些问题是noob问题或者这些问题已经被回答了,请原谅我。我正在尝试阅读多个数独谜题,并应用我在网上找到的算法。代码使用了网格(list[list[int]]
)设置。我尝试在网上寻找解决方案,但我发现我应该将.txt文件转换为JSON文件,然后从那里继续。
.txt
文件如下所示:
AME: sudoku
TYPE: SUD
COMMENT: 5 sudokus
SUDOKU 1
034000600
002600080
068300007
003001005
059060072
000520046
205906000
000408050
000007004
SUDOKU 2
000504000
000089020
785000000
002346008
040290050
860000000
030007042
400060805
608005030
SUDOKU 3
040000300
036072000
078060400
083000600
000300005
025008070
300004800
000000024
764089530
SUDOKU 4
000074900
000000046
079000300
600728009
980503000
037940050
200000000
008030060
060490023
SUDOKU 5
026030470
000200510
700900020
509000000
000050000
000000307
080009001
034006000
095070640
EOF
在线代码:
def is_valid(grid, r, c, k):
not_in_row = k not in grid[r]
not_in_column = k not in [grid[i][c] for i in range(9)]
not_in_box = k not in [grid[i][j] for i in range(r//3*3, r//3*3+3) for j in range(c//3*3, c//3*3+3)]
return not_in_row and not_in_column and not_in_box
def solve(grid, r=0, c=0):
if r == 9:
return True
elif c == 9:
return solve(grid, r+1, 0)
elif grid[r][c] != 0:
return solve(grid, r, c+1)
else:
for k in range(1, 10):
if is_valid(grid, r, c, k):
grid[r][c] = k
if solve(grid, r, c+1):
return True
grid[r][c] = 0
return False
grid = [
[0, 0, 4, 0, 5, 0, 0, 0, 0],
[9, 0, 0, 7, 3, 4, 6, 0, 0],
[0, 0, 3, 0, 2, 1, 0, 4, 9],
[0, 3, 5, 0, 9, 0, 4, 8, 0],
[0, 9, 0, 0, 0, 0, 0, 3, 0],
[0, 7, 6, 0, 1, 0, 9, 2, 0],
[3, 1, 0, 9, 7, 0, 2, 0, 0],
[0, 0, 9, 1, 8, 2, 0, 0, 3],
[0, 0, 0, 0, 6, 0, 1, 0, 0]
]
solve(grid)
print(*grid, sep='\n')
我不需要输入静态网格,而是使用.txt
文件。我只是找不到任何东西来帮助我解决手头的问题。这可能是因为我是python新手,或者我需要帮助来理解如何转换为JSON文件。
How to convert txt file into json using python?我已经研究过这个问题,但我甚至不确定这是否是正确的方法。
任何反馈都是值得赞赏的,甚至是在正确的方向点头也是有帮助的。
2条答案
按热度按时间gz5pxeao1#
下面是一个示例,说明如何将sudoku文本文件读入
list[list[int]]
的字典,即dict[str, list[list[int]]]
:输出:
当然,这是假设一个9x9的标准数独大小。
bfnvny8b2#
简单的答案是读取txt文件中的行,然后搜索数独,结果如下:
谜题列表现在包含了一个列表列表,但是现在所有的字符都是字符串,我将把转换成整数的工作留给你。