在一块 N x N 的棋盘 board 上,从棋盘的左下角开始,每一行交替方向,按从 1 到 N*N 的数字给方格编号。例如,对于一块 6 x 6 大小的棋盘,可以编号如下:

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/snakes-and-ladders
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————
解题思路:使用广度优先遍历,每一次最多只能前进六步,因为骰子的值为1-6之间。如果行进到的board的值不为0,则跳到board值指定的位置。

因为是蛇梯棋,每一层和下一层的位移方向是相反的,所以这是唯一需要注意的一点。

其Python代码如下:

class Solution(object):def snakesAndLadders(self, board):N = len(board)   # 每一层最多有几个数字,N的作用是用于经过多少个数字则换行def get(s):quot, rem = divmod(s-1, N)  # 返回s-1除于N的商和余数row = N - 1 - quot  # 判断当前数字在第几行col = rem if row%2 != N%2 else N - 1 - rem # 判断当前行数和最后一组行数之差是否是2的倍数return row, coldist = {1: 0}  # 用于存放已经扫描过的点,其中的value表示走的第几步queue = collections.deque([1])  # 建立一个队列while queue:s = queue.popleft()if s == N*N: # 如果走到了终点,则返回字典中对应的value值 return dist[s]  for s2 in range(s+1, min(s+6, N*N) + 1):  # 每次最多可以走6步,但是同时注意不能超出图的最大值,也就是N*Nr, c = get(s2)  # 获得其在board中实际对应的值if board[r][c] != -1:  # 如果行进到的位置不是-1,则跳到对应的位置s2 = board[r][c]if s2 not in dist:dist[s2] = dist[s] + 1queue.append(s2)return -1

leetcode —— 909. 蛇梯棋相关推荐

  1. LeetCode——909. 蛇梯棋(Snakes and Ladders)[中等]——分析及代码(Java)

    LeetCode--909. 蛇梯棋[Snakes and Ladders][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 广度优先搜索 (1)思路 (2)代码 (3)结果 三.其 ...

  2. LeetCode 909. 蛇梯棋(BFS)

    文章目录 1. 题目 2. 解题 1. 题目 N x N 的棋盘 board 上,按从 1 到 N*N 的数字给方格编号,编号 从左下角开始,每一行交替方向. 例如,一块 6 x 6 大小的棋盘,编号 ...

  3. leetcode 909. 蛇梯棋

    题目 N x N 的棋盘 board 上,按从 1 到 N*N 的数字给方格编号,编号 从左下角开始,每一行交替方向. 例如,一块 6 x 6 大小的棋盘,编号如下: r 行 c 列的棋盘,按前述方法 ...

  4. LeetCode 815. 公交路线 / 909. 蛇梯棋(还是bfs)/ 168. Excel表列名称 / 171. Excel表列序号

    815. 公交路线 2021.6.28 每日一题 题目描述 给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶.例如, ...

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

    909. 蛇梯棋-广度优先遍历 给你一个大小为 n x n 的整数矩阵 board ,方格按从 1 到 n2 编号,编号遵循 转行交替方式 ,从左下角开始 (即,从 board[n - 1][0] 开 ...

  6. 21-6-27 蛇梯棋

    蛇梯棋 难度[中等] N x N 的棋盘 board 上,按从 1 到 N*N 的数字给方格编号,编号 从左下角开始,每一行交替方向. 例如,一块 6 x 6 大小的棋盘,编号如下: r 行 c 列的 ...

  7. JAVA程序设计:蛇梯棋(LeetCode:909)

    在一块 N x N 的棋盘 board 上,从棋盘的左下角开始,每一行交替方向,按从 1 到 N*N 的数字给方格编号.例如,对于一块 6 x 6 大小的棋盘,可以编号如下: 玩家从棋盘上的方格 1 ...

  8. 每日一题 LeetCode909. 蛇梯棋 java题解

    题目 https://leetcode-cn.com/problems/snakes-and-ladders/ 代码 class Solution {int N;public int snakesAn ...

  9. C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码

    蛇梯问题 Snake and Ladder Problem 给定一个蛇梯板,找出从源单元格或第一个单元格到达目标单元格或最后一个单元格所需的最小掷骰次数.基本上,玩家可以完全控制掷骰子的结果,并希望找 ...

最新文章

  1. Centos7.2部署DHCP服务
  2. 思科中国创新中心总部正式落户广州
  3. 东莞市初中生中考计算机内容,2019年广东东莞市中考考试科目及内容
  4. 如何研究Maven build时发生了哪些事情
  5. 什么 时候用转义字符
  6. repeater的嵌套(转+总结)[http://www.cnblogs.com/esshs/archive/2005/04/07/132825.html]
  7. 要养成良好的书写SQL的习惯
  8. 新iPhone终于要去掉刘海了,但这个操作好骚啊!
  9. 以太网最小帧长与TCP/IP的联合运用
  10. cdoj 1092 韩爷的梦
  11. 狂砸250多亿!亚马逊花了7年时间,造了一个让你自愿加班到死的办公室!
  12. 《Adobe Illustrator CC经典教程》—第0课0.2节使用Adobe Creative Cloud进行同步设置
  13. php date 函数用法,PHP日期时间函数date()使用方法
  14. 关于Latex中smart pdf反向搜索问题
  15. 如何去管理Java项目
  16. 计算机视觉教程2-2:详解图像滤波算法(附Python实战)
  17. 如何从零开始解读什么叫产品经理
  18. 跨境电商“独立站”新风口丨从0-1答疑解惑篇
  19. 算法速成记录贴Day3
  20. 美国虚拟PSTN号码

热门文章

  1. 使用 Nginx 提升网站访问速度(转)
  2. 立冬了 广州还是夏天
  3. Serverless 实战 —— 阿里云函数计算配合SpringBoot项目
  4. 互联网架构,究竟为什么需要配置中心?
  5. 容器编排技术 -- Kubernetes kubectl create service loadbalancer 命令详解
  6. OSPF高级特性——LSA-3(Network Summary LSA)的过滤、路由协议——管理距离的修改、外部路由的metric值的修改
  7. CentOS7升级内核kernel5.0
  8. Linux 使用grep过滤多个条件及grep常用过滤命令
  9. 【Python】Pygame入门
  10. C#LeetCode刷题之#581-最短无序连续子数组( Shortest Unsorted Continuous Subarray)