首页 > 其他 > 详细

leetcode-167周赛-1293-网格中的最短路径

时间:2019-12-24 11:42:14      阅读:197      评论:0      收藏:0      [点我收藏+]

题目描述:

技术分享图片

 

 

 自己的提交:广度优先 O(mn*min(k,m+n))

技术分享图片

 

 

class Solution:
    def shortestPath(self, grid, k: int) -> int:
        visited = {}
        queue = [[0,0,k-1]]if grid[0][0] == 1 and k > 0 else [[0,0,k]]
        if k == 0 and grid[0][0] == 1:
            return 0
        m,n = len(grid),len(grid[0])
        k = min(m+n-3,k) #
        res = 0
        while queue:
            tmp = []
            for i,j,k in queue:
                if i == m-1 and j == n-1:
                    return res
                for i_,j_ in [(i+1,j),(i-1,j),(i,j+1),(i,j-1)]:
                    if 0 <= i_ < m and 0 <= j_ < n :
                        if grid[i_][j_] == 0 and ((i_,j_) not in visited or k > visited[(i_,j_)]):
                            tmp.append([i_,j_,k])
                            visited[(i_,j_)] = k
                        elif k > 0 and ((i_,j_) not in visited or k-1 > visited[(i_,j_)]):
                            tmp.append([i_,j_,k-1])
                            visited[(i_,j_)] = k - 1
            queue = tmp[::]
            res += 1
        return -1

leetcode-167周赛-1293-网格中的最短路径

原文:https://www.cnblogs.com/oldby/p/12090580.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!