不清楚这个问题该归结到dfs还是bfs里面。
原题截图
易错点
不太清楚怎么解释这,就是浅显的递归就可以解决了,因为没有复杂度的考量嘛。那就归纳一下易错点。
case1
递归结束条件的判断;
- 首先是走出去了,即下一步的坐标不在图中的定义域里面了。要记住是判断下一步,不是判断当前的位置。
- 其次是判断下一步的位置是否已经被走过了,走过了就说明绕圈了。
在此基础上,要记住递归后是返回上一层,并不是直接跳出这个递归。所以要设置一个布尔来判断是否应该进行运算。(即递归回上一层后继续按之前的流程运算会死循环)。
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)