花火yw 2021-10-27 17:06 采纳率: 100%
浏览 12
已结题

迷宫问题,为什么压入起点后,运行后说是空栈

moze=[
        [1,1,1,1,1,1,1,1,1,1],
        [1,0,0,1,0,0,0,1,0,1],
        [1,0,0,1,0,0,0,1,0,1],
        [1,0,0,0,0,1,1,0,0,1],
        [1,0,1,1,1,0,0,0,0,1],
        [1,0,0,0,1,0,0,0,0,1],
        [1,0,1,0,0,0,1,0,0,1],
        [1,0,1,1,1,0,1,1,0,1],
        [1,1,0,0,0,0,0,0,0,1],
        [1,1,1,1,1,1,1,1,1,1]
      ]
dirs = [
    lambda x,y:(x+1,y),
    lambda x,y:(x-1,y),
    lambda x,y:(x,y-1),
    lambda x,y:(x,y+1)
]
#输入一次xy,输出四个结果


def moze_path(x1,y1,x2,y2):
    stack = []
    stack.append((x1,y1))
    while(len(stack)>0):
        curNode = stack[-1]#当前位置 现在的x和y
        #curNode 是一个长度为2的元组
        # 上下左右:x-1,y:x+1,y;x,y-1;x,y+1;
        if curNode[0] == x2 and curNode[1] == y2:
            #走到终点
            for p in stack:
                print(p)
            return True
        for dir in dirs:
            nextNode = dir(curNode[0],curNode[1])
            #curNode[0]为x坐标     curNode[1]为y坐标
            # 如果下一节点能走
            if moze[nextNode[0]][nextNode[1]] == 0:
                #变化后的位置---nextNode[0]][nextNode[1]
                stack.append(nextNode)
                moze[nextNode[0]][nextNode[1]] = 2 #2表示已经走过
                break

            else:
                moze[nextNode[0]][nextNode[1]] = 2
                stack.pop()
                #栈顶出栈
    else:
        print("没有路")
        return False

moze_path(1,1,8,8)

运行结果:

IndexError: pop from empty list


  • 写回答

1条回答 默认 最新

  • 辉煌仪奇 2021-10-27 23:48
    关注

    你好,你这个迷宫没有路出去,能走的补数少于不能走的补数,将其做一个异常处理即可正确

    moze=[
            [1,1,1,1,1,1,1,1,1,1],
            [1,0,0,1,0,0,0,1,0,1],
            [1,0,0,1,0,0,0,1,0,1],
            [1,0,0,0,0,1,1,0,0,1],
            [1,0,1,1,1,0,0,0,0,1],
            [1,0,0,0,1,0,0,0,0,1],
            [1,0,1,0,0,0,1,0,0,1],
            [1,0,1,1,1,0,1,1,0,1],
            [1,1,0,0,0,0,0,0,0,1],
            [1,1,1,1,1,1,1,1,1,1]
          ]
    dirs = [
        lambda x,y:(x+1,y),
        lambda x,y:(x-1,y),
        lambda x,y:(x,y-1),
        lambda x,y:(x,y+1)
    ]
    #输入一次xy,输出四个结果
     
    def moze_path(x1,y1,x2,y2):
        stack = []
        stack.append((x1,y1))
        while(len(stack)>0):
            curNode = stack[-1]#当前位置 现在的x和y
            #curNode 是一个长度为2的元组
            # 上下左右:x-1,y:x+1,y;x,y-1;x,y+1;
            if curNode[0] == x2 and curNode[1] == y2:
                #走到终点
                for p in stack:
                    print(p)
                return True
            for dir in dirs:
                nextNode = dir(curNode[0],curNode[1])
                #curNode[0]为x坐标     curNode[1]为y坐标
                # 如果下一节点能走
                if moze[nextNode[0]][nextNode[1]] == 0:
                    #变化后的位置---nextNode[0]][nextNode[1]
                    stack.append(nextNode)
                    moze[nextNode[0]][nextNode[1]] = 2 #2表示已经走过
                    break
                else:
                    moze[nextNode[0]][nextNode[1]] = 2
                    stack.pop()
                    #栈顶出栈
        else:
            print("没有路")
            return False
    moze_path(1,1,8,8)
     
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 创建了问题 10月27日

悬赏问题

  • ¥15 matlab实现基于主成分变换的图像融合。
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊