题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc?tpId=37&tqId=21266&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
import sys s = list(map(int,input().split())) n,m =s[0],s[1] L=[] L3=[] L4=[] i=1 while i <=n: s = list(map(int,input().split())) L.append(s) i+=1 x=[-1,0,1,0] y=[0,-1,0,1] def bfs(i,j,n,m): distance=[[0 for i in range(m+1)] for j in range(n+1)] father = [[0 for i in range(m+1)] for j in range(n+1)] distance[i][j]=0 father[0][0]=[-1,-1] L3.append([i,j]) while L3: num=L3.pop(0) i,j =num[0],num[1] L[i][j]=1 k=0 while k<4: l=i+x[k] h=j+y[k] k+=1 if 0<=l<=n and 0<=h<=m: if L[l][h]!=1: distance[l][h]=distance[i][j]+1 #添加father二维数组,记录每一个遍历节点的父节点,最后从终点,回朔父节点 father[l][h]=[i,j] L3.append([l,h]) #print(father) #for a in father: # print() # for i in range(len(a)): # print(a[i],end=" ") return father father = bfs(0,0,n-1,m-1) #print(father[1][0]) i=n-1 j=m-1 L4=[] #回朔的时候将当前节点存储的父节点的i,j,然后在father数组中取父节点 while father[i][j]!=[-1,-1]: k=father[i][j][0] l=father[i][j][1] i=k j=l res = ",".join([str(i),str(j)]) res =("("+res+")") L4.append((res)) for x in L4[::-1]: print(x) res =(",".join([str(n-1),str(m-1)])) res =("("+res+")") print(res)