这来自我的家庭作业
您好。我不得不制作一个python数独求解器,这就是我想出来的。
http://pastebin.com/JRKaqSed(包括我的输入和我得到的输出)
但是,当我运行它时,第一个填充调用会导致下面的错误。它似乎同时添加了1到2个单元格。
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,因此它不知道是否已经使用了一个数字。
但是,我的代码仍未完成数独网格
答案 0 :(得分:3)
我无法复制你得到的错误,但你在sudoku网格中的阅读方式存在问题。
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的另一个问题)后,它解决了数独。
答案 1 :(得分:0)
我发现了这个错误。我只是在每行的开头生成rowSet,因此它不知道是否已经使用了一个数字,这导致了问题。
以下是更正后的代码: http://pastebin.com/JRKaqSed
但它仍然没有输出完全完成的数独网格。