迷宫 蓝桥杯 python 递归

不清楚这个问题该归结到dfs还是bfs里面。

原题截图

在这里插入图片描述

易错点

不太清楚怎么解释这,就是浅显的递归就可以解决了,因为没有复杂度的考量嘛。那就归纳一下易错点。

case1

递归结束条件的判断;

  1. 首先是走出去了,即下一步的坐标不在图中的定义域里面了。要记住是判断下一步,不是判断当前的位置。
  2. 其次是判断下一步的位置是否已经被走过了,走过了就说明绕圈了。
    在此基础上,要记住递归后是返回上一层,并不是直接跳出这个递归。所以要设置一个布尔来判断是否应该进行运算。(即递归回上一层后继续按之前的流程运算会死循环)。

case2

方向变换的判断,这个错了编译器是检查不出来的。。。就直接交个错误答案上去了。
在这里插入图片描述

代码

this_map=[
    "UDDLUULRUL",
    "UURLLLRRRU",
    "RRUURLDLRD",
    "RRUURLDLRD",
    "RRUURLDLRD",
    "DURLRLDLRL",
    "DURLRLDLRL",
    "DURLRLDLRL",
    "UUDDUDUDLL",
    "UUDDUDUDLL"
        ]
dxy={'U':[0,-1],
     "D":[0,1],
     "L":[-1,0],
     "R":[1,0]}
can=0
def dfs(x,y,temp,flag):
    if flag!=True:
        return
    else:
        temp[x][y]=1#本身的位置变为1
        #当前位置的标
        loc = this_map[x][y]
        # 下一个地方方的标
        x=x+dxy[loc][0]
        y=y+dxy[loc][1]
        if x<0 or y<0 or x>9 or y>9:#说明出去了
            global can
            can+=1
            flag=False
            return
        #要是前进的位置已经被标记了就是困住了
        elif temp[x][y]==1:
            flag=False
            return
        else:
            dfs(x,y,temp,flag)


for x in range(10):
    for y in range(10):
        temp=[[0 for _ in range(10)] for _ in range(10)]
        flag=True
        dfs(x,y,temp,flag)

print(can)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值