首页 > 编程语言 >[Python手撕]网格中的最短路径(可以有k次破墙的机会)

[Python手撕]网格中的最短路径(可以有k次破墙的机会)

时间:2024-10-02 11:35:18浏览次数:8  
标签:return Python 网格 next queue int grid visited 次破墙

class Solution:
    def shortestPath(self, grid: List[List[int]], k: int) -> int:
        n = len(grid)
        m = len(grid[0])

        if m == n == 1:
            return 0

        direction = [[0, 1], [-1, 0], [1, 0], [0, -1]]
        visited = [[[False] * (k + 1) for _ in range(m)] for _ in range(n)]
        visited[0][0][k] = True
        queue = deque([(0, 0, k, 0)])

        while queue:
            x, y, f, s = queue.popleft()
            for d in direction:
                next_x = x + d[0]
                next_y = y + d[1]
                if next_x == n - 1 and next_y == m - 1:
                    return s + 1
                else:
                    # 判断下一个位置是否超出范围
                    if 0 <= next_x < n and 0 <= next_y < m:
                        # 如果下一个位置是墙,必须保证还有破墙术,
                        # 并且我们必须保证之前没有路径访问过这个位置的时候剩余的破墙数等于当前路径剩余的破墙术,
                        # 更不能容忍之前路径剩余的破墙术大于当前路径剩余的破墙术,
                        # 上面两种情况下,当前路径是不可能比之前路径更快的
                        if (
                            grid[next_x][next_y] == 1
                            and f >= 1
                            and sum(visited[next_x][next_y][f - 1 : k + 1]) == 0
                        ):
                            visited[next_x][next_y][f - 1] = 1
                            queue.append([next_x, next_y, f - 1, s + 1])
                        elif (
                            grid[next_x][next_y] == 0
                            and sum(visited[next_x][next_y][f : k + 1]) == 0
                        ):
                            visited[next_x][next_y][f] = 1
                            queue.append([next_x, next_y, f, s + 1])
        return -1

标签:return,Python,网格,next,queue,int,grid,visited,次破墙
From: https://www.cnblogs.com/DCFV/p/18444518

相关文章

  • dynaconf python 配置管理库
    dynaconfpython配置管理库包含的特性基于12factor原则设置管理(默认值、校验、解析、模版)保护敏感信息(比如用户密码)多文件格式支持(toml,yaml,ini,json,py)支持环境变量重写可选的分层多环境配置支持支持外部配置存储(vault,redis)对于django,flask的扩展支持cli支持说......
  • Python-数据分析学习手册-全-
    Python数据分析学习手册(全)原文:LearnDataAnalysiswithPython协议:CCBY-NC-SA4.0一、如何使用这本书如果您已经在使用Python进行数据分析,只需浏览这本书的目录。你可能会发现很多你希望知道如何用Python做的事情。如果是这样,请随意直接翻到那一章并开始工作。每一课......
  • Python-自然语言处理应用指南-全-
    Python自然语言处理应用指南(全)原文:AppliedNaturalLanguageProcessingwithPython协议:CCBY-NC-SA4.0一、什么是自然语言处理?深度学习和机器学习继续在各个行业中扩散,并彻底改变了我希望在本书中讨论的主题:自然语言处理(NLP)。NLP是计算机科学的一个子领域,致力于让计......
  • python 包含有引号和花括号的字符串的格式化
    replace不起作用;update_per_seconds="30"uploadtime_per_seconds="30"imei_string="1234"###采用{0}format不行###下面replace不行msg="""{"rmtcmd":"set","dev":{"poll":{&......
  • (开题)flask框架股票模拟交易系统的设计与实现(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着金融市场的不断发展和互联网的普及,股票交易已成为许多人投资理财的重要手段。然而,股票市场的复杂性和风险性使得许多投资者在实际操作......
  • python - 合理的入门编程语言
    盗版资源我就一个人独享了,分享的大部分为“开源”,不小心则为侵权。当两国战争后,谁在乎“侵权”?编程语言心法参考:http://www.yinwang.org/blog-cn/2017/07/06/master-pl英语阅读速成:http://www.yinwang.org/blog-cn/2018/11/23/grammar文档部分:教程https://docs.python.org/3......
  • 计算机毕业设计 基于Python的摄影平台交流系统的设计与实现 Python+Django+Vue 前后端
    ......
  • 计算机毕业设计 基于Python的新闻采集与订阅平台的设计与实现 Python+Django+Vue 前后
    ......
  • 基于python+flask框架的咸鱼平台(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已经成为人们日常生活的重要组成部分。在众多电商平台中,二手交易平台以其独特的定位和市场需求,逐渐崭露......
  • 基于python+flask框架的线上考试系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,教育领域也迎来了数字化转型的浪潮。传统考试模式因受时间、地点限制,已难以满足现代教育的灵活性和便捷性需求。......