题解 | #迷宫问题#
迷宫问题
http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
while True:
try:
n,m=input().split()
n=int(n)
m=int(m)
map1=[]
#读取地图
for i in range(n):
map1.append([int(j) for j in input().split()])
#给地图周围绕一圈1(加墙),这样比较好判断边界值和死胡同
def addone(map1):
for i in map1:
i.insert(0,1)
i.append(1)
map1.append([1]*len(map1[0]))
map1.insert(0,[1]*len(map1[0]))
return map1
map1=addone(map1)
path=[(0,0)]
m=len(map1)-1
n=len(map1[0])-1
def jud(x,y,map1):#求x,y点坐标在迷宫里的可能走法,即向上,向下,向左,向右
#map1为迷宫位置图,path为迷宫的每点从起点到该点走过的所有的点
#k为本次走过的点
k=[]
if x==m-1 and y==n-1: #到达终点的话返回途径所有的点
return path
#如果到死胡同,也就是四个方向有三个都是1,则把这个点pop掉并且把这个点也标成1(反正是死胡同了)
elif (map1[x+1][y]+map1[x-1][y]+map1[x][y+1]+map1[x][y-1]==3 ) and not(x==1 and y==1):
map1[x][y]=1
path.pop()
else: #不是死胡同的话就选一个方向走,这里因为加了个外墙,所以所有值都被我减了1这样返回的结果才是正确的
if x+1<=m-1 and (x,y-1) not in path and map1[x+1][y]!=1: #向下
k+=[(x,y-1)]
elif x-1>=0 and (x-2,y-1) not in path and map1[x-1][y]!=1:#向上
k+=[(x-2,y-1)]
elif y+1<=n-1 and (x-1,y) not in path and map1[x][y+1]!=1:#向右
k+=[(x-1,y)]
elif y-1>=0 and (x-1,y-2) not in path and map1[x][y-1]!=1:#向左
k+=[(x-1,y-2)]
#把走过的路径加到path里去
path.extend(k)
#从上一步的最后一个点继续往后找,直到找到目标点
return jud(path[-1][0]+1,path[-1][1]+1,map1)
#运行一下这个递归
jud(1,1,map1)
#把这个以字符串形式打出来,元组的话会报错
for i in path:
print('('+ str(i[0])+','+str(i[1])+')')
except:
break
写了一天才写出来五五五五,写完发现因为墙对xy进行的减1操作其实可以最后输出的时候再弄,不过这里我就不改了。这个答案可以通过,但只适合只有一条路径的。我应该写的挺清楚的了~有啥不明白的可以问问俺。希望大佬和觉得有帮助的小伙伴给我个赞嘻嘻
查看26道真题和解析