X星球的一处迷宫游乐场建在某个小山坡上。
它是由10x10相互连通的小房间组成的。
房间的地板上写着一个很大的字母。
我们假设玩家是面朝上坡的方向站立,则:
L表示走到左边的房间,
R表示走到右边的房间,
U表示走到上坡方向的房间,
D表示走到下坡方向的房间。
X星球的居民有点懒,不愿意费力思考。
他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把100名玩家放入一个个小房间内。
玩家一定要按照地上的字母移动。
迷宫地图如下:
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
请你计算一下,最后,有多少玩家会走出迷宫?
而不是在里边兜圈子。
添加记忆数组的dfs
f=open("C:\\Users\\zzl261004\\Desktop\\pp.txt","r")
temp=f.readlines()
arr=[]
for t in temp:
arr.append(list(t.strip()))
vis=[[0 for _ in range(10)] for _ in range(10)]
ans=0
def dfs(row,col):
if row<0 or col<0 or row>=10 or col>=10:
return True
if vis[row][col]==1:#再次访问的时候就说明是死循环了
return False
vis[row][col]=1#第一次访问
if arr[row][col]=="U":
return dfs(row-1,col)
elif arr[row][col]=="R":
return dfs(row,col+1)
elif arr[row][col]=="D":
return dfs(row+1,col)
elif arr[row][col]=="L":
return dfs(row,col-1)
for i in range(10):
for j in range(10):
vis=[[0 for _ in range(10)] for _ in range(10)]
if dfs(i,j)==True:
ans+=1
print(ans)
添加临界值步骤,超过这个步骤了就说明死循环了
f=open("C:\\Users\\zzl261004\\Desktop\\pp.txt","r")
temp=f.readlines()
arr=[]
for t in temp:
arr.append(list(t.strip()))
vis=[[0 for _ in range(10)] for _ in range(10)]
ans=0
def dfs(row,col,num):
global ans
if row<0 or col<0 or row>=10 or col>=10:
ans+=1
return
if num>1000:
return
if arr[row][col]=="U":
dfs(row-1,col,num+1)
elif arr[row][col]=="R":
dfs(row,col+1,num+1)
elif arr[row][col]=="D":
dfs(row+1,col,num+1)
elif arr[row][col]=="L":
dfs(row,col-1,num+1)
for i in range(10):
for j in range(10):
dfs(i,j,0)