n, m = 30, 50 z_set = set() # 记录走过的点 mg = [[int(x) for x ininput()] for _ inrange(n)]
defno(x, y): if x < 0or y < 0or x >= 30or y >= 50or mg[x][y] == 1or ((x, y) in z_set): # 满足任意一个都不符合要求 returnFalse returnTrue
deflujing(x, y): cun = [(x, y, '')] # 存走的步数和方向
while cun: x, y, z = cun.pop(0) # 将位于0号位置的元素删除,将后面的赋给x,y,z if no(x, y): # x,y没有超界 z_set.add((x, y)) # 将符合条件的x,y存起来,存到集合 cun.append((x + 1, y, z + 'D')) # 按字母顺序,这样最后的出来的是顺序小的 cun.append((x, y - 1, z + 'L')) cun.append((x, y + 1, z + 'R')) cun.append((x - 1, y, z + 'U')) if x == 29and y == 49: # 判断是否到达出口 return z
print(lujing(0, 0))
解题思路:
首先是将整个迷宫给存起来,将每一个数字都按单独的一个元素,
先来看一个案例:
a = [0 for _ in range(10)] print(a)
b = [[0 for _ in range(2)]for _ in range(4)] print(b)
c = [[int(x)for x in range(5)]for _ in range(3)] print(c)
d = [[str(x)for x in input()]for _ in range(4)] print(d)