2

这是我的作业


你好。我必须制作一个 python 数独求解器,这就是我想出的。

http://pastebin.com/JRKaqSed(包括我的输入和我得到的输出)

但是,当我运行它时,第一个填充调用会导致以下错误。似乎同时将 1 添加到两个单元格。

0 5 9 0 0 0 4 8 3 #Current row being tested
To Add, 1 #Number to add
0 5 #Row, Column
0 5 9 0 1 1 4 8 3 #Row it outputs

我不知道它为什么这样做。任何帮助将不胜感激。

谢谢

编辑:

我发现了这个错误。我只在每行的开头生成 rowSet,因此它不知道是否已经使用了一个数字。

但是,我的代码仍然没有完成数独网格

4

2 回答 2

3

我无法复制您得到的错误,但是您在数独网格中的阅读方式存在问题。

0 5 9 0 0 0 4 8 3
0 0 0 0 0 0 0 1 2
0 1 0 0 2 8 0 0 0
0 9 8 0 7 4 0 2 0
0 4 0 0 8 0 0 3 0
0 7 0 6 3 0 5 4 0
0 0 0 1 6 0 0 5 0
6 2 0 0 0 0 0 0 0
7 3 5 0 0 0 8 6 0

以您的方式读取此文件:

fi = open("sudoku.txt", "r")
inFile = fi.read()
grid = [list(i) for i in inFile.split("\n")]

这将创建一个网格,它是列表列表,但不是您期望的。例如,这是第一行:

['0', ' ', '5', ' ', '9', ' ', '0', ' ', '0', ' ', '0', ' ', '4', ' ', '8', ' ', '3']

无需将文件读入字符串并在换行符上拆分,您可以循环打开文件对象并在空间上拆分拆分中的每一行。

fi = open("sudoku.txt", "r")
grid = []
for line in fi:
    grid.append([int(i) for i in line.split(" ")])

所以我认为你的问题与网格中仍然存在的空间有关,因为在修复了这个(以及关于 oldGrid 某处的另一个问题)之后,它解决了数独。

于 2013-05-14T13:20:36.723 回答
0

我发现了这个错误。我只在每行的开头生成 rowSet,因此它不知道是否已经使用了一个数字,这导致了问题。

这是更正后的代码: http: //pastebin.com/JRKaqSed

它仍然没有输出完全完成的数独网格。

于 2013-05-14T14:29:20.670 回答