蛇梯问题

Snake and Ladder Problem

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

如果玩家到达的牢房是梯子的底部,玩家必须爬上梯子,如果到达的牢房是蛇的嘴,则必须在不掷骰子的情况下下下到蛇的尾巴。

例如,考虑所示的电路板,从单元1到达单元30所需的最小掷骰子次数为3。

以下是步骤:

a) 首先掷两个骰子到3号牢房,然后爬到22号牢房

b) 然后掷6到28。

c) 最终通过2达到30。

还有其他解决方案,如(2,2,6),(2,4,4),(2,3,5)。。等

其思想是将给定的蛇梯板视为顶点数等于板中单元数的有向图。问题归结为在图中寻找最短路径。如果接下来的6个顶点没有蛇或阶梯,则图的每个顶点都有一条到下6个顶点的边。如果接下来的六个顶点中有任何一个具有蛇或阶梯,则当前顶点的边将到达阶梯的顶部或蛇的尾部。由于所有边的权重相等,我们可以使用图的宽度优先搜索有效地找到最短路径。

以下是上述想法的实施情况。输入由两个东西表示,第一个是“N”,它是给定电路板中的单元数,第二个是大小为N的数组“move[0…N-1]”。如果没有snake,也没有来自i的梯形图,则条目move[i]为-1,否则move[i]包含snake或位于i的梯形图的目标单元索引。

using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public class Entry{public int v { get; set; } = 0;public int dist { get; set; } = 0;public Entry(){}}public class Snakes_Ladder_Problem{public static int Minium_Dice_Throws(int[] move){int n = move.Length;int[] visited = new int[n];Queue<Entry> q = new Queue<Entry>();Entry qe = new Entry();visited[0] = 1;q.Enqueue(qe);while (q.Count != 0){qe = q.Dequeue();int v = qe.v;if (v == (n - 1)){break;}for (int j = v + 1; j <= (v + 6) && j < n; j++){if (visited[j] == 0){Entry a = new Entry();a.dist = (qe.dist + 1);visited[j] = 1;if (move[j] != -1){a.v = move[j];}else{a.v = j;}q.Enqueue(a);}}}return qe.dist;}}
}

C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码相关推荐

  1. leetcode —— 909. 蛇梯棋

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

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

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

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

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

  4. 21-6-27 蛇梯棋

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

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

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

  6. JavaScript实现Knapsack problem背包问题算法(附完整源码)

    JavaScript实现Knapsack problem背包问题算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 MergeSort.js完整源代码 Knapsack ...

  7. leetcode 909. 蛇梯棋

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

  8. LeetCode 909. 蛇梯棋(BFS)

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

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

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

最新文章

  1. python英语单词库-python-data-英语单词
  2. 【干货】用Axure做原型,一秒钟提高效率的必知技巧总结
  3. [Python学习] 专题六.局部变量、全局变量global、导入模块变量
  4. leetcode 322. Coin Change | 322. 零钱兑换(动态规划)
  5. 面试开发人员的有效方法
  6. Python os模块文件操作(一)
  7. 使用to like动词_17
  8. win10删除开机密码_取消WIN10开机密码的方法
  9. 远程下载马bypass waf
  10. 现代版马拉火车!蔚来出动燃油板车运送充电车服务
  11. LeetCode 633. Sum of Square Numbers
  12. 活字格企业Web应用生成器V3.0发布更新,支持插件管理和多人协作开发
  13. C/C++[codeup 1808]字符串查找删除
  14. 一款基于VUE3.0的开源卡密发卡系统
  15. Excel 2010 VBA 入门 109 获取某列最后非空单元格行号
  16. springboot 返回二进制文件流
  17. 【科普】Kubectl基本操作命令
  18. cython,加速python,保护代码(3):扩展文件 .pxd
  19. 中国禁止“外国废物”可能有助于AI在美国的传播
  20. 恢复误删sqlserver数据库表中的数据

热门文章

  1. ios13测试版怎么卸载软件,苹果手机升ios13.2后怎么删除app ios13.2卸载软件应用方法...
  2. XSS Challenges通关教程
  3. 中科院计算所培训中心2017年第二季度课程安排
  4. 转载 各大流行linux版本评价
  5. CentOS和Ubuntu有什么不同
  6. 大数据知识梳理(Hadoop、HDFS)(整理中。。。)
  7. 升级windows11的方法
  8. BG22蓝牙——第四弹 联调单片机,蓝牙点灯Demo
  9. 『Others』一键关闭所有应用程序
  10. k-d树(Kd trees)