Python深度优先迷宫求解器

Python深度优先迷宫求解器,python,maze,Python,Maze,我有一个python的家庭作业,我应该让一个机器人从开始到结束,并返回到目标的路径。我让机器人搜索,但我希望列表只显示从开始到结束的路径。现在,路径列表将返回所有已访问的方块。。而且,当涉及到目标时,它不会停止,只是继续其他节点。 我错过了什么 def find(labyrinth, robotPos, pathList = []): frontier = adjacent_passages(labyrinth, robotPos) pathList.append(rob

我有一个python的家庭作业,我应该让一个机器人从开始到结束,并返回到目标的路径。我让机器人搜索,但我希望列表只显示从开始到结束的路径。现在,路径列表将返回所有已访问的方块。。而且,当涉及到目标时,它不会停止,只是继续其他节点。 我错过了什么

def find(labyrinth, robotPos, pathList = []):

    frontier = adjacent_passages(labyrinth, robotPos)   
    pathList.append(robotPos)

    if len(frontier) == 1:
        print("Corner")
        return []

    for i in range(0, len(frontier)):
        if frontier[i] == goal:
            pathList.append(frontier[i])
            return pathList

    for i in range(0, len(frontier)):
        if frontier[i] not in pathList:
            pathList.append(frontier[i])
            if (find(labyrinth, frontier[i], pathList) == []):
                pathList.pop()

    return pathList

我不知道这是否是您问题的答案,但我注意到的第一件事是,您不应该使用列表作为默认函数参数pathList=[]


请参见

我不知道这是否是您问题的答案,但我注意到的第一件事是您不应该使用列表作为默认函数参数pathList=[]

请参见

您正在将robotPos附加到路径列表中,即使搜索失败,也不会将其删除,这就是为什么该列表包含所有已访问的位置。我建议完全避免使用append/pop列表,而是将一个新值作为参数传递给下一次迭代:

if (find(labyrinth, frontier[i], pathList + [frontier[i]]) == [])...
其他可能的简化包括:

放下机器人POS。将当前位置设为path参数的最后一项 使用一个循环而不是两个循环 在循环中,在stuff中使用x,而不是在range0、lenstuff中使用i 差不多

def find(path):

    if path[-1] == goal:
        return path

    for new_position in adjacent_positions(path[-1]):
        if new_position not in path:
            found_path = find(path + [new_position])
            if found_path:
                return found_path

    return None
即使搜索失败,您也会将robotPos附加到路径列表,而不会将其删除,这就是为什么该列表包含所有已访问的位置。我建议完全避免使用append/pop列表,而是将一个新值作为参数传递给下一次迭代:

if (find(labyrinth, frontier[i], pathList + [frontier[i]]) == [])...
其他可能的简化包括:

放下机器人POS。将当前位置设为path参数的最后一项 使用一个循环而不是两个循环 在循环中,在stuff中使用x,而不是在range0、lenstuff中使用i 差不多

def find(path):

    if path[-1] == goal:
        return path

    for new_position in adjacent_positions(path[-1]):
        if new_position not in path:
            found_path = find(path + [new_position])
            if found_path:
                return found_path

    return None

我认为在代码中需要更多的打印语句。你怎么知道你的代码达到了停止条件?我想你需要在代码中加入更多的打印语句。您如何知道您的代码是否达到停止条件?由于默认情况下不返回任何代码,因此不需要返回任何代码。谢谢,这帮了大忙!!:没有必要返回None,因为默认情况下不会返回None。谢谢,这帮了大忙!!: