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

news2024/10/1 3:21:06

1 蛇梯问题

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的梯形图的目标单元索引。

2 源程序

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;
        }
    }
}
 

3 源代码

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;
        }
    }
}

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

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

相关文章

基于鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)的无人机三维路径规划

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

gradle下载太慢者超时!国内镜像可以直接下载

# 解决Gradle下载过慢问题的有效方式&#xff1a;使用国内镜像站点 在开发过程中&#xff0c;我们经常会遇到Gradle下载速度缓慢或超时的问题。作为一个强大而流行的构建工具&#xff0c;Gradle是许多项目中必不可少的一部分。然而&#xff0c;由于官方下载地址可能受网络限制…

Windows10/11配置WSL(Ubuntu)环境

文章目录 WSL介绍WSL部署扩展&#xff1a;辅助工具Windosw Terminal安装下载 WSL介绍 传统方式获取Linux操作系统&#xff0c;是安装完整的虚拟机及镜像环境&#xff0c;例如虚拟机VMware 而使用WSL,可以以非常轻量化的方式&#xff0c;得到Linux系统环境 它无需单独虚拟一套硬…

React 19 Cheat Sheet

React 19让构建网站和应用程序变得更容易&#xff0c;更好。有了很酷的新东西&#xff0c;比如React编译器、Actions API和更好的Hooks&#xff0c;编写代码变得更快&#xff0c;管理应用程序的数据变得更简单 React 19让构建网站和应用程序变得更容易&#xff0c;更好。有了很…

vue组件之间通信方式汇总

方式1&#xff1a;props和$emit props和$emit仅仅限制在父子组件中使用 1.props&#xff1a;父组件向子组件传递数据 1.1 代码展示 <template><div><!-- 这是父组件 --><div>父组件中的基本数据类型age的值是:{{this.age}}</div><div>…

C++的一些基础语法

前言&#xff1a; 本篇将结束c的一些基础的语法&#xff0c;方便在以后的博客中出现&#xff0c;后续的一些语法将在涉及到其它的内容需要用到的时候具体展开介绍&#xff1b;其次&#xff0c;我们需要知道c是建立在c的基础上的&#xff0c;所以c的大部分语法都能用在c上。 1.…

【Docker】容器的概念

容器技术&#xff1a;容器技术是基于虚拟化技术的&#xff0c;它使应用程序从一个计算机环境快速可靠地转移到另一个计算机环境中&#xff0c;可以说是一个新型地虚拟化技术。 一、docker容器 Docker:是一个开源地容器引擎Docker 是一种轻量级的容器化技术&#xff0c;其主要原…

雷赛控制卡获取轴当前位置的值不正确问题处理

现像 从雷赛控制卡中获取当前轴位置值时发现轴在向零点的右边走时显示的值是负数。正常来就一般是要反馈正数的。一般轴零点右边是正方向&#xff0c;限位是正限位&#xff0c;反馈的位置也应该是正数。 如果雷赛软件中的【单轴参数】中的基本设置中的【脉冲模式】设置的是对的…

【神经网络与深度学习】LSTM(Long Short-Term Memory)神经网络模型

概述 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;结构&#xff0c;通常被用于处理和学习时间序列数据。因此&#xff0c;LSTM属于深度学习领域中的一种神经网络模型。 在深度学习中&#xff0c;LSTM被广泛应用于…

【轮式平衡机器人】——TMS320F28069片内外设之eCAP

引入 TMS320F28069的eCAP&#xff08;增强型捕获模块&#xff09;是一个强大的外设&#xff0c;用于精确测量和捕获输入信号的事件和时间戳。 在电机控制、传感器数据采集和信号处理等应用中&#xff0c;eCAP模块可以用于测量霍尔传感器、编码器或其他数字输入信号的周期、频…

MySQL 的基础操作

数据库的基础操作 1. 库操作2. 表的操作3. 数据类型 数据库是现代应用程序中至关重要的组成部分&#xff0c;通过数据库管理系统&#xff08;DBMS&#xff09;存储和管理数据。 1. 库操作 创建数据库 创建数据库是开始使用数据库的第一步。下面是一些常见的创建数据库的示例&a…

为什么在镀膜时要测薄膜折射率?

在芯片制造中&#xff0c;镀膜工序&#xff08;PVD,CVD&#xff09;是必不可少的关键环节&#xff0c;薄膜的质量直接影响了芯片的性能。对这些薄膜的精细控制又离不开对其折射率的深入理解和精确测量。今天将对芯片制造中薄膜折射率的概念、测量方法&#xff0c;以及它在整个制…

Unmanaged PowerShell

简介 在渗透测试当中经常会使用到PowerShell来执行脚本, 但是直接使用PowerShell.exe是一个非常敏感的行为, EDR等产品对PowerShell.exe进程的创建监控的很密切, 并且随着PowerShell的渗透测试工具的普及, 越来越多的EDR会利用微软提供的AMSI接口对PS脚本进行扫描, 但是对于低…

力扣最热100题——56.合并区间

吾日三省吾身 还记得梦想吗 正在努力实现它吗 可以坚持下去吗 目录 吾日三省吾身 力扣题号&#xff1a;56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 题目描述 Java解法一&#xff1a;排序然后原地操作 具体代码如下 Java解法二&#xff1a;new一个list&#xf…

Pytorch学习 day04(Totensor、Normalize、Resize、Compose)

Totensor 把一个PIL格式的图片&#xff0c;或者ndarray格式的图片转换为tensor格式使用方法&#xff0c;如下&#xff1a; from PIL import Image from torchvision import transforms from torch.utils.tensorboard import SummaryWriterimg Image.open("images/00130…

算法——滑动窗口之找到字符串中所有的字母异位词,串联所有单词的子串

6.找到字符串中所有的字母异位词 题目:. - 力扣&#xff08;LeetCode&#xff09; 6.1如何快速判断两个字符串是否是异位词 假设现在有s1 aabca,s2 abaca,那么这两个就是异位词,容易想到的判断方法就是将两个字符串按照字典序排序,再依次比较,但是时间复杂度很高;我们看看…

python并发编程:IO模型比较分析

blocking和non-blocking的区别在哪&#xff0c;synchronous IO和asynchronous IO的区别在哪。 blocking vs non-blocking&#xff1a;调用blocking IO会一直block住对应的进程直到操作完成&#xff0c;而non-blocking IO在kernel还准备数据的情况下会立刻返回。 synchronous …

【R语言爬虫实战】抓取省市级城市常务会议内容

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

mysql如何开启手动提交事务

在mysql中&#xff0c;有一个变量autocommit&#xff0c;表示自动提交&#xff0c;默认为1&#xff0c;表示开启自动提交。通过以下命令查询 select autocommit;当autocommit为1时&#xff0c;任何一条sql语句都是一个事务&#xff0c;执行完由mysql自动提交。如果想自己决定什…

OS-Copilot:实现具有自我完善能力的通用计算机智能体

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ AI 缩小了人类间的知识和技术差距 论文标题&#xff1a;OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 论文链接&#xff1a;https://arxiv.org/abs/2402.07456 项目主页&a…