题解 | #走迷宫#

走迷宫

https://www.nowcoder.com/practice/e88b41dc6e764b2893bc4221777ffe64

因为方向可以上下左右,所以不能用基础的dp方式。可以用BFS的思路,主要是要把访问过的位置过滤

import sys
import collections
lineidx = 0
r = 0
c = 0
points = []
arr = []
for line in sys.stdin:
    if lineidx == 0:
        a = line.split()
        r= int(a[0])
        c = int(a[1])
        arr = [[1 for _ in range(c)] for i in range(r)]
    elif lineidx == 1:
        a = line.split()
        points = [int(i) for i in a]
    else:
        for j in range(len(line)):
            if line[j] == ".":
                arr[lineidx-2][j] = 0
    lineidx = lineidx + 1
#print(arr)
def short(g,point):
    que=collections.deque()
    que.append([(point[0] - 1, point[1] - 1, 0)]) 
    visit=set()
    visit.add((point[0] - 1, point[1] - 1))
    while len(que)>0 and len(que[0])>0:
        tmp=[]
        groupi = que.pop()
        for (x, y, prestep) in groupi: 
            if x == point[2] - 1 and y == point[3] - 1:
                return prestep
            for d in [[0, 1], [0, -1], [1, 0], [-1, 0]]: 
                ni,nj=x+d[0],y+d[1]
                if (ni,nj) not in visit and ni>=0 and ni<r and nj>=0 and nj<c and g[ni][nj]==0:
                    tmp.append((ni,nj,prestep+1))
                    visit.add((ni,nj)) 
        que.append(tmp)
    return -1
print(short(arr,points))

全部评论

相关推荐

我的名字是句号:接好运
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务