Python:迷宫
创始人
2024-05-24 10:16:22
0

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

X 星球的一处迷宫游乐场建在某个小山坡上。它是由 10×10 相互连通的小房间组成的。

房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:

  • �L 表示走到左边的房间,
  • �R 表示走到右边的房间,
  • �U 表示走到上坡方向的房间,
  • �D 表示走到下坡方向的房间。

X 星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!

开始的时候,直升机把 1100 名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。

迷宫地图如下:

UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR

请你计算一下,最后,有多少玩家会走出迷宫,而不是在里边兜圈子?

如果你还没明白游戏规则,可以参看下面一个简化的 4x4 迷宫的解说图:

思路:

除了一个个数以外

dfs():递归,在每个点,它根据指示牌向上、下、左、右四个方向走。
dfs结束的条件::
1)走出了迷宫,返回1。
2)走不出迷宫,返回0。什么情况下走不出迷宫?兜圈子,回到了曾经走过的点。
用vis[i]j]记录点(i,j)是否曾经走过,如果走过,就是兜圈子。

用不着对每个点都做一次dfs()。
从一个点出发,走过一条路径,最后走出了迷宫,那么以这条路径上所有的点为起点,都能走出迷宫;
若这条路径兜圈子了,那么这条路径上所有的点都不能走出迷宫。
如果对路径进行记录,就能大大减少计算量。

参考代码: 

def dfs(x,y):if x<0 or y<0 or x>=10 or y>=10:return 1if vis[x][y]==1:  #走过直接返回 0return 0vis[x][y]=1if mp[x][y]=='L':return dfs(x,y-1)if mp[x][y]=='R':return dfs(x,y+1)if mp[x][y]=='U':return dfs(x-1,y)if mp[x][y]=='D':return dfs(x+1,y)
mp=[[''*10] for i in range(10)]  #二维数组存迷宫
for i in range(10):       #读迷宫mp[i]=list(input())
ans=0
for i in range(10):for j in range(10):vis=[[0]*10 for _ in range(10)]if dfs(i,j)==1:ans+=1
print(ans)
#最终答案 31

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...