我最近开始解决难题和递归/回溯。 我试图解决6x6摩天大楼的难题,其中包括根据提供给我们的具体线索填充一块6x6板。 我已经做了尽可能多的约束编程,但为了解决某些难题,我不得不诉诸暴力迫使结束
我的板中的一行退出约束函数的外观如下所示:
board = [[1, 2, 3, 4, 5], 6, [1, 2, 3, 5, 6], [1, 2, 4, 5], [1, 3], [2, 3, 4, 5]]
其中子列表是该特定单元的不同可能性。(因此,第一个子列表中的单元格可以是1、2、3、4或5)
我已经成功地实现了回溯蛮力方法,但希望尝试一种最小的启发式方法,例如优先考虑可能性最小的单元。 以下是我目前掌握的情况:
def search(searchBoard, clues):
findLeast = full(searchBoard)
if not findLeast:
return True
else:
row , col = findLeast
val = searchBoard[row][col]
for i in searchBoard[row][col]:
if is_valid(searchBoard, clues, 6, i, (row, col)):
searchBoard[row][col] = i
if search(searchBoard, clues):
return True
searchBoard[row][col] = val
return False
def full(puzzle):
try:
min = 0
for i in range(len(puzzle)):
for j in range(1 ,len(puzzle)):
if isinstance(puzzle[i][j] , list):
if len(puzzle[i][j-1]) < len(puzzle[i][j]):
min = len(puzzle[i][j-1])
pos = (i , j-1)
return pos
except TypeError:
return None
检查元素是否可以插入到特定单元格中
(在我的代码中编辑了一些语法错误)
目前没有回答
相关问题 更多 >
编程相关推荐