思路:使用暴力的方法来求解,对于每一个玩家,计算他能否走出去。对于一些走不出去的玩家,我设定了一个步数k,每走一步k加一。如果k>150还在这个迷宫里就判定走不出去。因为这个迷宫是100个小房间,所以我就随便找了一个数150,走这么多不还没出去肯定就是走不出去啦。150设定的有点大,不过这对于计算机来说不是问题,又没有限定运行时间。
代码:
m=[['U','D','D','L','U','U','L','R','U','L'],
['U','U','R','L','L','L','R','R','R','U'],
['R','R','U','U','R','L','D','L','R','D'],
['R','U','D','D','D','D','U','U','U','U'],
['U','R','U','D','L','L','R','R','U','U'],
['D','U','R','L','R','L','D','L','R','L'],
['U','L','L','U','R','L','L','R','D','U'],
['R','D','L','U','L','L','R','D','D','D'],
['U','U','D','D','U','D','U','D','L','L'],
['U','L','R','D','L','U','U','R','R','R']]
count=0
for i in range(10):
for j in range(10):
ii=i
jj=j
k=0
print((ii,jj))
while k<150:
if m[i][j]=='U':
i=i-1
elif m[i][j]=='D':
i=i+1
elif m[i][j]=='L':
j=j-1
else:
j=j+1
k=k+1
if i<0 or i>9 or j<0 or j>9:
count=count+1
break
i=ii
j=jj
print(k)
print(count)
答案:31
我不太会做这个,看的这个博客:
(159条消息) 蓝桥杯精选赛题——跳蚱蜢_wzyannn的博客-CSDN博客
set()集合本身有不重复性,但是这个文章里面往set()集合添加元素时还对元素进行了判重,我尝试把判重的步骤删去,结果运行时间加了好多。我觉得应该是为了加快代码运行速度才判重吧,但是set()在添加元素时本身会判重啊,我还没查到这种写法可以加快代码运行速度的文献资料。
这个题还挺难的。。为了多刷点题这种难题先放弃
方法:深度优先遍历
代码:
global ans
ans=0
map1=[[0 for i in range(7)] for j in range(7)]
direction=[(1,0),(-1,0),(0,1),(0,-1)]
def dfs(x,y):
global ans
if x==0 or x==6 or y==0 or y==6:
ans=ans+1
return
for d in direction:
x1=x+d[0]
y1=y+d[1]
if map1[x1][y1]==0:
map1[x1][y1]=1
map1[6-x1][6-y1]=1
dfs(x1,y1)
map1[x1][y1]=0
map1[6-x1][6-y1]=0
map1[3][3]=1
dfs(3,3)
print(ans//4)
对于看不懂这个正则表达式的,不知道为啥题目给出的案例答案是六,看这个:
真题解析│蓝桥杯省赛真题之正则问题_括号 (sohu.com)
这个题类似的要多看看。
代码:
s=input()
count=0
pos=0
length=len(s)
def dfs():
global length,pos
tmp,ans=0,0
while pos