Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实施";“最小启发式”;在回溯算法中解决Python中的难题_Python_Recursion - Fatal编程技术网

实施";“最小启发式”;在回溯算法中解决Python中的难题

实施";“最小启发式”;在回溯算法中解决Python中的难题,python,recursion,Python,Recursion,我最近开始解决难题和递归/回溯。 我试图解决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) 我已经成功地实现了回溯蛮力方法,但希望尝试一种最小的

我最近开始解决难题和递归/回溯。 我试图解决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
def搜索(搜索板、线索):
findLeast=已满(搜索板)
如果不是findLeast:
返回真值
其他:
行,列=findLeast
val=搜索板[行][列]
对于搜索板[行][列]中的i:
如果有效(搜索板,线索,6,i,(行,列)):
搜索板[行][col]=i
如果搜索(搜索板、线索):
返回真值
搜索板[行][col]=val
返回错误
def满(拼图):
尝试:
最小值=0
对于范围内的i(len(puzzle)):
对于范围(1,len(谜题))中的j:
如果存在(谜题[i][j],请列出):
如果len(拼图[i][j-1])
检查元素是否可以插入到特定单元格中

(在我的代码中编辑了一些语法错误)