LeetCode 909. 蛇梯棋

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) % nif r % 2 == 1:c = n - 1 - creturn n - 1 - r, cfrom queue import Queuevisited = set()q = Queue()q.put((1, 0))while not q.empty():idx, step = q.get()for i in range(1, 7):next_idx = i + idxif next_idx > n * n:breaknext_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 + 1if next_idx not in visited:visited.add(next_idx)q.put((next_idx, step + 1))return -1

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

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

相关文章

Linux:八种重定向详解(万字长文警告)

相关阅读Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 本文将讨论Linux中的重定向相关问题&#xff0c;在阅读本文前&#xff0c;强烈建议先学习文件描述符的相关内容Linux&#xff1a;文件描述符详解。 重定向分为两类&#x…

个性化大语言模型:PPlug——让AI更懂你

在当今数字化转型的时代&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已经成为了不可或缺的工具&#xff0c;它们在自然语言理解、生成和推理方面展现了非凡的能力。然而&#xff0c;这些模型普遍采用的是“一刀切”的方式&#xff0c;即对于相同的输入给予所有用户相…

MySQL的乐观锁、悲观锁机制及实现

乐观锁 乐观锁的实现参考了这篇文章&#xff0c;里面还将了乐观锁的时间戳实现方式&#xff1a; 跳转 概述 乐观锁是一种并发控制策略&#xff0c;它假设多个事务不会发生冲突&#xff0c;在执行操作时不加锁&#xff0c;非常乐观&#xff0c;只需每次进行提交时利用标识进行…

ansible批量安装postgresql软件

本文为杭州云贝教育 刘老师 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。 随着分布式系统和大规模应用的普及&#xff0c;自动化部署和管理变得越来越重要。Ansible 是一种流行的自动化工具&#xff0c;它…

DAY80服务攻防-中间件安全HW2023-WPS 分析WeblogicJettyJenkinsCVE

知识点 1、中间件-Jetty-CVE&信息泄漏 2、中间件-Jenkins-CVE&RCE执行 3、中间件-Weblogic-CVE&反序列化&RCE 4、应用WPS-HW2023-RCE&复现&上线CS 中间件-Jetty-CVE&信息泄漏 Jetty是一个开源的servlet容器&#xff0c;它为基于Java的Web容器…

分布式光伏监控系统 在鄂尔多斯市鄂托克旗某煤矿项目中的应用

摘 要&#xff1a;分布式光伏发电就是将太阳能光伏板分散布置在各个区域&#xff0c;通过小规模、模块化的方式实现电能的并网或独立使用&#xff0c;这种发电方式具有就近发电、就近并网、就近转换、就近使用的特点。近年来&#xff0c;技术和政策支持推动了光伏组件的成本持续…

sed(1):强大的文本处理命令

一、命令简介 ​sed​&#xff08;stream editor&#xff09;是一个强大的文本处理工具&#xff0c;它能够执行基本的文本转换&#xff0c;如替换、删除、插入和修改文本行的特定部分。sed​ 命令通常用于对文本文件进行批量编辑&#xff0c;也可以用于处理来自管道的输入。 …

煤矿井下钻场目标检测数据集 5类 voc格式

煤矿井下钻场目标检测数据集 本数据集包含了来自不同钻场和环境背景条件下的70948张图片&#xff0c;涵盖了夹持器、钻机卡盘、煤矿工人、矿井安全帽和钻杆等五类目标&#xff0c;并提供了PASCAL VOC格式的标注文件。 摘要 煤矿井下钻场打钻是解决瓦斯灾害、水害、隐蔽地质灾害…

9.24-k8s服务发布

Ingress 使用域名发布 K8S 服务 部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 ki…

灵当CRM multipleUpload.php 文件上传致RCE漏洞复现

0x01 产品描述&#xff1a; 灵当CRM是一款专为中小企业量身定制的智能客户关系管理工具&#xff0c;由上海灵当信息科技有限公司开发和运营。该系统广泛应用于多个行业&#xff0c;包括金融、教育、医疗、IT服务及房地产等领域&#xff0c;旨在满足企业对客户个性化管理的需求&…

使用yum为centos系统安装软件以及使用(包含阿里云yum源配置)

centos系统配置阿里云yum源 因为centos7官方停止维护&#xff0c;自带yum源用不了了&#xff0c;所以可以更换成阿里云yum源 方法&#xff1a; 使用root权限执行以下语句 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo CentOS…

【LinuxC高级】汇总

ls ls -l&#xff1a;显示文件的详细信息 ls -a&#xff1a;显示隐藏文件 ls -lh&#xff1a;文件大小单位显示 ls -i&#xff1a;显示文件的inode号 修改密码 passwd 用户名 su 用户名 -----> 用户名 su ----> 如果不加用户名&#xff0c;默认切换到超级用户 cd cd 路径…

YOLOv10改进,YOLOv10主干网络替换为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点

摘要 基础模型的核心理念是“更多即不同”,这一理念在计算机视觉和自然语言处理领域取得了惊人的成功。然而,变压器模型的优化挑战和固有复杂性呼唤一种向简化转变的范式。在本研究中,引入了 VanillaNet,一种拥抱设计优雅的神经网络架构。通过避免高深度、快捷方式和复杂操…

MySQL—存储过程详解

基本介绍 存储过程和函数是数据库中预先编译并存储的一组SQL语句集合。它们的主要目的是提高代码的复用性、减少数据传输、简化业务逻辑处理&#xff0c;并且一旦编译成功&#xff0c;可以永久有效。 存储过程和函数的好处 提高代码的复用性&#xff1a;存储过程和函数可以在…

记某地级市护网的攻防演练行动

0x1 前言 哈喽&#xff0c;师傅们&#xff01; 这次给师傅们分享的是上上个星期的地级市护网的攻防演练的两个案例&#xff0c;涉及到的知识点可能比较偏&#xff0c;下面我也会提前给师傅们拓展下改漏洞相关的知识点内容。护网攻防演练中&#xff0c;涉及到的很多敏感内容这…

【Linux】驱动的基本架构和编译

驱动源码 /** Silicon Integrated Co., Ltd haptic sih688x haptic driver file** Copyright (c) 2021 kugua <daokuan.zhusi-in.com>** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public Licen…

css实现自定义静态进度条-vue2

实现如图所示 html&#xff1a; <div class"progress-container"><div class"progress-box left" :style"leftStyle"><div class"progress-value-top left">总中标电量</div><div class"progress-val…

前端请求音频返回pcm流进行播放

业务场景是chat回答&#xff0c;点击播放则会将回答内容进行请求&#xff0c;返回音频数据流进行播放 实现方案&#xff0c;因为后端返回的是流式接口&#xff0c;但是流式接口我去截取后用自己完成的流式播放器方法进行播放会存在杂音&#xff0c;但是短句接口返回速度尚可&a…

composer环境变量(phpstudy集成环境)无法使用问题

composer 不是内部或外部命令,也不是可运行的程序 或批处理文件。 按下WinR组合键打开“运行”&#xff0c;输入sysdm.cpl 回车&#xff0c;打开“系统属性”并切换至“高级”选项卡&#xff0c;点击“环境变量”进行配置 配置完后点击确定&#xff0c;重新打开命令行&#x…

Bootstrap框架-container类,container-fluid类,栅格系统

1.Bootstrap Bootstrap为页面内容和栅格系统包裹了一个.container容器&#xff0c;框架预先定义类 1.1container类 响应式布局容器的宽度 手机-小于768px 宽度设置100%&#xff1b; 平板-大于等于768px 设置宽度为750px 桌面显示器-大于等于992px 设置宽度 970px 大屏幕显…