题目
来源
思路
BFS的模板题,用队列实现,可参考:AcWing 844. 走迷宫(数组模拟,C++STL, python、打印路径) - AcWing;其他详见代码。
代码
def bfs():
d[0][0]=0
queue=[(0,0)]
dx=[-1,0,1,0]
dy=[0,-1,0,1]
while queue: #队列不能为空
x,y=queue.pop(0)
for i in range(4): #四个方向去搜索
a=x+dx[i]
b=y+dy[i]
if a>=0 and a<n and b>=0 and b<m and d[a][b]==-1 and g[a][b]==0: #说明可以走通
queue.append((a,b)) #入队列
d[a][b]=d[x][y]+1 #更新距离
print(d[n-1][m-1])
n,m=map(int,input().split())
g=[[-1 for j in range(m)] for i in range(n)] #地图
d=[[-1 for j in range(m)] for i in range(n)] #距离(每个位置到初始位置的距离)
for i in range(n):
col=list(map(int,input().split()))
for j in range(m):
g[i][j]=col[j] #处理输入
bfs()