LeetCode 909. 蛇梯棋

news2024/9/25 7:26:48

LeetCode 909. 蛇梯棋

给你一个大小为 n x n 的整数矩阵 board ,方格按从 1 到 n2 编号,编号遵循 转行交替方式 ,从左下角开始 (即,从 board[n - 1][0] 开始)的每一行改变方向。
你一开始位于棋盘上的方格 1。每一回合,玩家需要从当前方格 curr 开始出发,按下述要求前进:
选定目标方格 next ,目标方格的编号在范围 [curr + 1, min(curr + 6, n2)] 。
该选择模拟了掷 六面体骰子 的情景,无论棋盘大小如何,玩家最多只能有 6 个目的地。
传送玩家:如果目标方格 next 处存在蛇或梯子,那么玩家会传送到蛇或梯子的目的地。否则,玩家传送到目标方格 next 。
当玩家到达编号 n2 的方格时,游戏结束。
如果 board[r][c] != -1 ,位于 r 行 c 列的棋盘格中可能存在 “蛇” 或 “梯子”。那个蛇或梯子的目的地将会是 board[r][c]。编号为 1 和 n2 的方格不是任何蛇或梯子的起点。
注意,玩家在每回合的前进过程中最多只能爬过蛇或梯子一次:就算目的地是另一条蛇或梯子的起点,玩家也 不能 继续移动。
举个例子,假设棋盘是 [[-1,4],[-1,3]] ,第一次移动,玩家的目标方格是 2 。那么这个玩家将会顺着梯子到达方格 3 ,但 不能 顺着方格 3 上的梯子前往方格 4 。(简单来说,类似飞行棋,玩家掷出骰子点数后移动对应格数,遇到单向的路径(即梯子或蛇)可以直接跳到路径的终点,但如果多个路径首尾相连,也不能连续跳多个路径)
返回达到编号为 n2 的方格所需的最少移动次数,如果不可能,则返回 -1。
示例 1:
在这里插入图片描述
输入:board = [[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1],[-1,35,-1,-1,13,-1],[-1,-1,-1,-1,-1,-1],[-1,15,-1,-1,-1,-1]]
输出:4
解释:
首先,从方格 1 [第 5 行,第 0 列] 开始。
先决定移动到方格 2 ,并必须爬过梯子移动到到方格 15 。
然后决定移动到方格 17 [第 3 行,第 4 列],必须爬过蛇到方格 13 。
接着决定移动到方格 14 ,且必须通过梯子移动到方格 35 。
最后决定移动到方格 36 , 游戏结束。
可以证明需要至少 4 次移动才能到达最后一个方格,所以答案是 4 。
示例 2:
输入:board = [[-1,-1],[-1,3]]
输出:1
提示:
n == board.length == board[i].length
2 <= n <= 20
board[i][j] 的值是 -1 或在范围 [1, n2] 内
编号为 1 和 n2 的方格上没有蛇或梯子

图的广度优先遍历,注意题的优先性

class Solution:

    def snakesAndLadders(self, board: List[List[int]]) -> int:
        # 抽象成一个图 就是求1到n2的最短路径
        # 使用bfs 则最先到达的一定是最短路径
        n = len(board)

        def idx2rc(idx, n):
            r, c = (idx - 1) // n, (idx - 1) % n
            
            if r % 2 == 1:
                c = n - 1 - c
            return n - 1 - r, c

        from queue import Queue
        visited = set()
        q = Queue()
        q.put((1, 0))
        while not q.empty():
            idx, step = q.get()
            for i in range(1, 7):
                next_idx = i + idx
                if next_idx > n * n:
                    break
                next_x, next_y = idx2rc(next_idx, n)
                if board[next_x][next_y] != -1:
                    next_idx = board[next_x][next_y]
                if next_idx == n * n:
                    return step + 1
                if next_idx not in visited:
                    visited.add(next_idx)
                    q.put((next_idx, step + 1))
        return -1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2162908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务(一)

目录 一、概念 1、单体架构 2、微服务 3、springcloud 二、微服务的拆分 1、微服务的拆分原则 1.1 什么时候拆 1.2 怎么拆 2、服务调用 2.1 resttemplate 2.2 远程调用 一、概念 1、单体架构 单体架构&#xff08;monolithic structure&#xff09;&#xff1a;顾名…

项目启动卡住不动Property ‘mapperLocations‘ was not specified.

问题如上图所示&#xff1b; 原因&#xff1a;在mapper打了个断点&#xff01;

js实现多行文本控件textarea,根据文本内容自适应窗口全部显示

概述 本人在使用html控件textarea&#xff0c;多行显示的时候&#xff0c;希望根据后台实际的文本&#xff0c;来全部显示文本内容&#xff0c;而不用再去操作滚动条查看全部文本。 本功能实现的难点在于&#xff0c;计算当前文本显示有多少行。 软件环境 编辑器&#xff1a…

8.11Zero Crossing Detection (零交叉检测)

基本概念 零交叉检测是一种基于二阶导数的边缘检测方法&#xff0c;它通过查找二阶导数过零点来定位边缘。 注意: OpenCV没有直接提供这种检测方法&#xff0c;但可以通过结合其他函数来实现。 在OpenCV中&#xff0c;基于C的Zero Crossing Detection&#xff08;零交叉检测&…

关于PHP方面需要掌握的一些基础语法

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于【PHP的基础语法】相关内容&#xff01;…

Unity开发绘画板——03.简单的实现绘制功能

从本篇文章开始&#xff0c;将带着大家一起写代码&#xff0c;我不会直接贴出成品代码&#xff0c;而是会把写代码的历程以及遇到的问题、如何解决这些问题都记录在文章里面&#xff0c;当然&#xff0c;同一个问题的解决方案可能会有很多&#xff0c;甚至有更好更高效的方式是…

零售业的数字化转型与消费者体验升级

在数字化浪潮的推动下&#xff0c;零售业正经历着前所未有的变革。数字化转型不仅为零售商带来了新的商业模式和运营效率的提升&#xff0c;更重要的是&#xff0c;它极大地提升了消费者的购物体验。金智维将探讨零售业如何通过数字化转型&#xff0c;实现线上线下融合、智能推…

【架构】NewSQL

文章目录 NewSQLTiDBTiDB 主要组件特点使用场景安装与部署 推荐阅读 NewSQL NewSQL是一种数据库管理系统(DBMS)的类别&#xff0c;它结合了NoSQL数据库的可扩展性和传统SQL数据库的事务一致性。具体来说&#xff0c;NewSQL数据库旨在解决传统关系型数据库在处理大规模并发事务…

通过pyenv local 3.6.1 这里设置了当前目录的python版本,通过pycharm基于这个版本创建一个虚拟环境

要在 PyCharm 中基于你通过 pyenv local 设置的 Python 版本创建虚拟环境&#xff0c;可以按照以下步骤进行操作&#xff1a; 步骤 1: 获取当前使用的 Python 路径 通过 pyenv 查找当前项目下的 Python 解释器路径&#xff0c;使用以下命令&#xff1a; pyenv which python …

Thread , ThreadLocal , ThreadLocalMap , Entry 之间的关系?

Thread , ThreadLocal , ThreadLocalMap , Entry 之间的关系&#xff1f; 首先ThradLocal是线程的本地副本&#xff0c;怎么理解这句话呢&#xff1f;一个Thread都有一个它自己的ThreadLocalMap。ThreadLocalMap不是HashMap的结构&#xff0c;而是一个Entry数组&#xff0c;里面…

报错解决方案

大模型-报错解决方案 百度千帆大模型 仅个人笔记使用&#xff0c;感谢点赞关注 百度千帆大模型 未开通付费模型 qianfan.errors.APIError: api return error, req_id: code: 17, msg: Open api daily request limit reached 可能的原因: 未开通所调用服务的付费权限&#xff0…

【设计模式-观察者模式】

定义 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;用于定义一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象&#xff08;被观察者&#xff09;的状态变化。当主题状态发生变化时&#xff0c;所有依赖于它的观察…

00DSP学习-F28379D学习准备(了解一个工程的构成)

叠甲 我也算初学F28379D&#xff0c;不对之处请大家斧正。不同型号的DSP在外设配置的函数上有一些区别&#xff0c;但是掌握一种对其他型号的来说则难度不大。对于我们而言学习DSP最终还是要用于算法验证&#xff0c;而DSP资源的最大化利用、代码效率提升等则是后话。 软件准…

大数据-146 Apache Kudu 安装运行 Dockerfile 模拟集群 启动测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

进阶SpringBoot之分布式系统与 RPC 原理

分布式系统是若干独立计算机的集合&#xff0c;这些计算机对于用户来说就像单个相关系统 分布式系统是由一组通过网络进行通信&#xff0c;为了完成共同的任务而协调工作的计算机节点组成的系统 其目的是利用更多的机器&#xff0c;处理更多的数据 RPC&#xff08;Remote Pr…

【Day20240924】05git 两人协作 冲突

git 两人协作 冲突 命令行解决 两个人修改同一文件时 的冲突可视化解决 两个人修改同一文件时 的冲突参考 命令行解决 两个人修改同一文件时 的冲突 假设kerwin.js是项目的路由文件。tiechui文件夹是组员铁锤的工作目录&#xff1b;test2008文件夹是组长的工作目录。此时&…

JAVA基本简介(期末)

1、JDK JRE JVM &#xff08;1&#xff09;JDK JAVA标准开发包&#xff0c;提供了编译、运行JAVA程序所需的各种工具和资源&#xff0c;包括JAVA编译器、JAVA运行时的环境&#xff0c;及常用的JAVA类库等 &#xff08;2&#xff09;JRE JAVA运行环境&#xff0c;用于解释执行JA…

CNAS软件检测实验室信息安全性测试作业指导书编写指南

CNAS软件检测实验室在申请信息安全领域测试的相关资质时&#xff0c;需要按照GB/T 25000.51-2016《软件产品质量要求和测试细则》标准中的方法&#xff0c;编写作业指导书&#xff0c;指导软件检测实验室内部信息安全性测试的开展。CNAS软件检测实验室信息安全性测试作业指导与…

风力发电机叶片表面缺陷识别检测数据集yolo数据集 共7000张

风力发电机叶片表面缺陷识别检测数据集yolo数据集 共7000张 风力发电机叶片表面缺陷识别数据集&#xff08;Wind Turbine Blade Defects Recognition Dataset, WTBDRD&#xff09; 摘要 WTBDRD 是一个专门为风力发电机叶片表面缺陷识别而设计的数据集&#xff0c;旨在为相关领…

【目标检测】隐翅虫数据集386张VOC+YOLO

隐翅虫数据集&#xff1a;图片来自网页爬虫&#xff0c;删除重复项后整理标注而成 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;386 标注…