909. 蛇梯棋-广度优先遍历

news2024/10/7 8:21:04

909. 蛇梯棋-广度优先遍历

给你一个大小为 n x n 的整数矩阵 board ,方格按从 1 到 n2 编号,编号遵循 转行交替方式 ,从左下角开始 (即,从 board[n - 1][0] 开始)每一行交替方向。

玩家从棋盘上的方格 1 (总是在最后一行、第一列)开始出发。

每一回合,玩家需要从当前方格 curr 开始出发,按下述要求前进:

选定目标方格 next ,目标方格的编号符合范围 [curr + 1, min(curr + 6, n2)] 。
    该选择模拟了掷 六面体骰子 的情景,无论棋盘大小如何,玩家最多只能有 6 个目的地。
传送玩家:如果目标方格 next 处存在蛇或梯子,那么玩家会传送到蛇或梯子的目的地。否则,玩家传送到目标方格 next 。 
当玩家到达编号 n2 的方格时,游戏结束。

r 行 c 列的棋盘,按前述方法编号,棋盘格中可能存在 “蛇” 或 “梯子”;如果 board[r][c] != -1,那个蛇或梯子的目的地将会是 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

这一题真是让博主吃了巨大的亏,你看这个题目怎么看感觉都像是动态规划算法,但是其实用动态规划不能回溯,唉,解题代码如下:

int f(int now,int m,int n,int **board){
      int index;
      int i=now-1;
      if(m%2==0){
           if((m-1-i/n)%2==1){
            index=board[m-1-i/n][i%n];

        }
        else{
            index=board[m-1-i/n][n-i%n-1];

        }

      }
      else{
           if((m-1-i/n)%2==0){
            index=board[m-1-i/n][i%n];

        }
        else{
            index=board[m-1-i/n][n-i%n-1];

        }

      }
      return index;

}

int snakesAndLadders(int** board, int boardSize, int* boardColSize){
    int m=boardSize,n=boardColSize[0];
    int dp[n*m+1][2];
    int   visit[n*m+1];
    int start=0,end=0;
    

   
     for(int i=1;i<=n*m;i++){
       
         visit[i]=0;
     }

 //      printf("now %d| %d ",now,board[m-1-i/n][i%n]);
     dp[end][0]=1;
      dp[end++][1]=0;
     //f(now_t,m,n,board)
     
   while(start!=end){
       int now=dp[start][0];
       int step=dp[start++][1];
       for(int i=1;i<=6;i++){
           if(now+i==m*n){
               return step+1;
           }
           int index=f(now+i,m,n,board);
           if(index==-1){

               if(visit[now+i]==0){
               visit[now+i]=1;
                dp[end][0]=now+i;
               dp[end++][1]=step+1;
           }
               continue;
           }
           
           if(index>m*n){
               
               break;
           }
           else if(index==m*n){
               return  step+1;
               
           }
           else{
                 
           if(visit[index]==0){
               visit[index]=1;
                dp[end][0]=index;
               dp[end++][1]=step+1;
           }

           }
       }
               

           

       
   }
return -1;
    
   
   
}

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

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

相关文章

高压开关电源3D PCB绘制教程:SOLIDWORKS绘制瓷片电容教程

本教程配有配套视频教程&#xff0c;读者可以配合配套的视频教程学习&#xff0c;下载本课的对应课件和源文件&#xff0c;更多课程及材料&#xff0c;敬请关注凡亿教育&#xff1a;《高压开关电源3D PCB绘制教程》。绘制指导&#xff1a;家介绍瓷片电容的绘制方法&#xff0c;…

ICML2018 | PixelSNAIL+:An Improved Autoregressive Generative Model

论文链接&#xff1a;PixelSNAIL: An Improved Autoregressive Generative Model 论文标题&#xff1a;PixelSNAIL: An Improved Autoregressive Generative Model 代码&#xff1a;GitHub - neocxi/pixelsnail-public GitHub - neocxi/pixelsnail-public 一、问题提出 高…

程序人生:25岁我从零基础转到软件测试,我看到了前途...目前28K

推荐好文&#xff1a; [内部资源] 想拿年薪30W的软件测试人员&#xff0c;这份资料必须领取~ Python自动化测试全栈性能测试全栈&#xff0c;挑战年薪40W 没有一个人的人生&#xff0c;能够按照自己写好的脚本去走。从一而终是幸运的&#xff0c;但也是不幸的&#xff0c;因…

1568_AURIX_TC275_电源管理_唤醒配置与状态

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 如果有待机RAM保持的功能激活了&#xff0c;那么唤醒以及复位都不会进行RAM的重新初始化。 PORST相关的滤波开了之后&#xff0c;可以抵抗500ns的尖峰脉冲干扰。 CPU不仅可以请求自我进入i…

代码随想录刷题记录 day43 股票买卖的最佳时机1 2

代码随想录刷题记录 day43 股票买卖的最佳时机1 2 参考&#xff1a;代码随想录 121. 买卖股票的最佳时机 思想 dp数组定义 dp[i][0]表示 第i天 持有股票 手头的最大的现金数为dp[i][0] dp[i][1]表示 第i天 不持有股票 手头的最大的现金数为dp[i][1] 递推公式 dp[i][0] dp[i-…

2004-2020年全国31省环境规制强度

2004-2020年全国各省环境规制强度 1、时间区间为2004-2020年 2、范围&#xff1a;包括全国31个省份 3、缺失情况&#xff1a;西藏存在部分年份缺失&#xff0c;其他省份无缺失 4、指标包括&#xff1a; 工业污染治理完成投资(万元)、第二产业增加值(亿元)、环境规制强度 …

vue父子组件之间的传值,及互相调用父子组件之间的方法

场景&#xff1a;记录下父子组件之间的传值方法&#xff0c;以及调用他们的内部的方法 *** 父组件给子组件传值是通过属性绑定的方法 *** 子组件给父组件传值是通过绑定对应的方法将自身的值传递给父组件 当然&#xff0c;我这只是说了一种传参方式&#xff0c;也包含通过vuex的…

Spring Boot基于FreeMarker发送模板邮件(带附件)

目录一、背景二、maven依赖三、编码实现3.1、邮件对象3.2、服务层3.2.1、抄送人3.2.2、嵌入式资源3.2.3、附件3.3、邮件模板3.3.1、模板引擎3.4、配置文件四、测试4.1、发送简单邮件4.2、发送复杂邮件4.3、效果图一、背景 邮件在工作中中经常被用到&#xff0c;场景非常的广泛&…

高分子PEG:8Arm PEG-DBCO,八臂聚乙二醇环辛炔 MV1K 2K 3.4K 5K

【中文名称】八臂聚乙二醇环辛炔 【英文名称】 8Arm PEG-DBCO&#xff0c;DBCO PEG 8Arm 【结 构 式】 【CAS号】N/A 【分子量】1000&#xff0c;2000&#xff0c;3400&#xff0c;5000&#xff0c;10000&#xff0c;20000 【基团部分】DBCO 【纯度标准】95% 【包装规格】1g&…

【Lilishop商城】No3-8.模块详细设计,订单模块-2(订单)的详细设计

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑&#xff0c;其中重点包括接口类、业务类&#xff0c;具体的结合源代…

ssm+Vue计算机毕业设计校园社团管理系统(程序+LW文档)

ssmVue计算机毕业设计校园社团管理系统&#xff08;程序LW文档&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

Android入门第46天-使用BroadCast来模拟异地登录事件发生后的主动退出另一个设备重登录

简介 随着对BroadCast的越来越深入&#xff0c;我们今天要实现一个稍微复杂一点的BroadCast。即我们常用来有时APP打开时如果多个设备同时登录一个帐号&#xff0c;而我们只允许一个设备登录一个帐号时&#xff0c;此时我们的APP会弹一个对话框如&#xff1a;您的账号在别处登…

结合面试详细分析 HashMap 源码

个人文档站点&#xff1a;小熊学Java 1、底层结构 相信大家都已经听过很多了&#xff0c;这里就不多阐述了&#xff0c;至于什么时候是数组&#xff0c;什么时候会变成链表&#xff0c;后续会讲解&#xff0c;别急&#xff01; JDK版本数据结构JDK1.7数组链表JDK1.8数组 &…

腾讯云数据万象:智能+存储双驱动,数倍提升内容生产效能

伴随数字经济市场稳步扩张&#xff0c; AI和富媒体融合的场景式体验、营销模式、分享渠道已经成为数字商业中不可或缺的部分。12月1日&#xff0c;在2022腾讯全球数字生态大会存储专场&#xff0c;腾讯云数据万象发布产品更新&#xff0c;与腾讯云对象存储COS共同打造智能存储生…

[附源码]Nodejs计算机毕业设计基于JAVA语言的国货美妆店管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

JavaScript-DOM操作表单

目录 表单事件 表单方法 操作表单 获取表单的值 表单内容html checkbox的获取办法 表单事件 注意&#xff1a;onsubmit,onreset只能给表单添加 表单.submit ;表单.onreset; form.onsubmitfunction(){alert(表单即将被提交);};form.onresetfunction(){alert(表单即将被重…

ChatGPT:竟然精通ENVI IDL、ArcGIS等软件!

目录 01 使用途径 02 使用 01 使用途径 我试了很多网站&#xff0c;包括注册登录、插件、镜像网站&#xff0c;微信机器人&#xff0c;QQ机器人&#xff0c;但是目前这些或多或少都由于OpenAI的限制无法正常使用。所以总的来说需要科学上网并且需要国外手机号&#xff0c;这有…

CCIE-重认证-300-410-补充题库-必须的哟

实验题 VRF router bgp 65000 bgp router-id x bgp log-neighbor-cha address-fa ipv4 vrf green red con neigh x remote-as 65000 neigh x act 重复red inter e0/0 ip vrf for red ip add x x 重复e0/1,for green inter e0/2.100 enc dot 100 ip vrf for red ip add x x …

无工具情况下linux数据库命(postgresql)令行建表操作文档

首先将帮助文档下的test.sql放在服务器的某个位置。sql文件如下图&#xff1a; /*Navicat Premium Data TransferSource Server : postgres-123Source Server Type : PostgreSQLSource Server Version : 100010Source Host : 192.168.3.123:5432Source C…

完全开源的代码生成器之code-generator

什么是code-generator code-generator是一个低代码平台, 可以解决90%单表增删改查工作量, 你可以通过自定义代码模板来生成适合自己的代码。 目前该系统主要针对的是语言是java, 数据源是mysql(其他数据库待测试)&#xff0c;数据源支持mysql, oracle, dm, PostgreSql等数据库…