我正在尝试编写一些代码,以找到数独难题的解决方案。如果某个已解决的单元格与代码当前正在解决的单元格发生冲突,我想清除该已解决的单元格并将其放在要迭代的列表的末尾,然后重试当前的单元格。换句话说,我要删除一个冲突,推迟解决它,然后先解决当前问题。
到目前为止,这是我写的:
def solvepuzzle(grid, input_coordinates):
unsolved_cells = input_coordinates
solved_cells = []
while unsolved_cells:
for row in unsolved_cells:
solve(row)
if solve(row) is True:
print('Successful')
unsolved_cells.pop(row)
if solve(row) is False:
print('removing conflicting cell..')
conflicter = find_conflict(grid, row)
grid = reset_board(grid, conflicter)
unsolved_cells.append(conflicter)
unsolved_cells.insert(0, row)
if not unsolved_cells:
print('Operation successful.')
if unsolved_cells:
print('Operation unsuccessful.')
print('To be made: ', unsolved_cells)
return grid
但是,这无法正常工作。 input_coordinates / unsolved_cells的顺序被弄乱了,并跳过了一步,因此代替了1,2,3,4,它只解决了1,3。另外,我似乎无法使插入工作。这样的想法是,在消除冲突之后,如果循环失败,则for循环将再次尝试,但是顺序似乎是随机的。
如何改善代码?