C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码

news2024/11/16 16:43:51

1 老鼠迷宫问题

迷宫中的老鼠,作为另一个可以使用回溯解决的示例问题。

迷宫以块的N×N二进制矩阵给出,其中源块是最左上方的块,即迷宫[0][0],目标块是最右下方的块,即迷宫[N-1][N-1]。老鼠从源头开始,必须到达目的地。老鼠只能朝两个方向移动:向前和向下。

在迷宫矩阵中,0表示该块是死胡同,1表示该块可用于从源到目标的路径。请注意,这是典型迷宫问题的简单版本。例如,更复杂的版本可以是rat可以在4个方向上移动,而更复杂的版本可以具有有限的移动次数。

2 老鼠迷宫问题的回溯法求解

(1)创建一个解决方案矩阵,最初用0填充。

(2)创建一个递归函数,该函数采用初始矩阵、输出矩阵和rat(i,j)的位置。

(3)如果位置超出矩阵或位置无效,则返回。

(4)将位置输出[i][j]标记为1,并检查当前位置是否为目标位置。如果到达目的地,打印输出矩阵并返回。

(5)递归调用位置(i+1,j)和(i,j+1)。

(6)取消标记位置(i,j),即输出[i][j]=0。

3 源程序

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static class Rat_In_Maze_Problem
    {
        private static bool Rate_In_Maze_IsSafe(int[,] maze, int x, int y)
        {
            int N = maze.GetLength(0);
            return (x >= 0 && x < N && y >= 0 && y < N && maze[x, y] == 1);
        }

        public static bool Rate_In_Maze_Solve(int[,] maze, out int[,] sol)
        {
            int N = maze.GetLength(0);
            sol = new int[N, N];
            if (Rate_In_Maze_Utility(maze, 0, 0,ref sol) == false)
            {
                return false;
            }
            return true;
        }

        private static bool Rate_In_Maze_Utility(int[,] maze, int x, int y,ref int[,] sol)
        {
            int N = maze.GetLength(0);
            if (x == N - 1 && y == N - 1 && maze[x, y] == 1)
            {
                sol[x, y] = 1;
                return true;
            }

            if (Rate_In_Maze_IsSafe(maze, x, y))
            {
                if (sol[x, y] == 1)
                {
                    return false;
                }
                sol[x, y] = 1;
                if (Rate_In_Maze_Utility(maze, x + 1, y,ref sol))
                {
                    return true;
                }
                if (Rate_In_Maze_Utility(maze, x, y + 1,ref sol))
                {
                    return true;
                }
                if (Rate_In_Maze_Utility(maze, x - 1, y,ref sol))
                {
                    return true;
                }
                if (Rate_In_Maze_Utility(maze, x, y - 1,ref sol))
                {
                    return true;
                }
                sol[x, y] = 0;
                return false;
            }
            return false;
        }
    }
}
 

4 源代码

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static class Rat_In_Maze_Problem
    {
        private static bool Rate_In_Maze_IsSafe(int[,] maze, int x, int y)
        {
            int N = maze.GetLength(0);
            return (x >= 0 && x < N && y >= 0 && y < N && maze[x, y] == 1);
        }

        public static bool Rate_In_Maze_Solve(int[,] maze, out int[,] sol)
        {
            int N = maze.GetLength(0);
            sol = new int[N, N];
            if (Rate_In_Maze_Utility(maze, 0, 0,ref sol) == false)
            {
                return false;
            }
            return true;
        }

        private static bool Rate_In_Maze_Utility(int[,] maze, int x, int y,ref int[,] sol)
        {
            int N = maze.GetLength(0);
            if (x == N - 1 && y == N - 1 && maze[x, y] == 1)
            {
                sol[x, y] = 1;
                return true;
            }

            if (Rate_In_Maze_IsSafe(maze, x, y))
            {
                if (sol[x, y] == 1)
                {
                    return false;
                }
                sol[x, y] = 1;
                if (Rate_In_Maze_Utility(maze, x + 1, y,ref sol))
                {
                    return true;
                }
                if (Rate_In_Maze_Utility(maze, x, y + 1,ref sol))
                {
                    return true;
                }
                if (Rate_In_Maze_Utility(maze, x - 1, y,ref sol))
                {
                    return true;
                }
                if (Rate_In_Maze_Utility(maze, x, y - 1,ref sol))
                {
                    return true;
                }
                sol[x, y] = 0;
                return false;
            }
            return false;
        }
    }
}

 

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

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

相关文章

R语言 | 复数 相关函数

问题 大家好&#xff0c;我有一个问题&#xff0c;我看到一个函数如下&#xff1a; L2_distance <- function(A, B){rowA <- apply(A*A, 1, sum)matrixA <- matrix(rep(rowA, eachlength(rowA)), nrowlength(rowA), byrowT)rowB <- apply(B*B, 1, sum)matrixB &l…

Elasticsearch:什么是 DevOps?

DevOps 定义 DevOps 是一种现代软件开发方法&#xff0c;它将公司软件开发 (Dev) 和 IT 运营 (Ops) 团队的工作结合起来并实现自动化。 DevOps 提倡这样一种理念&#xff1a;这些传统上独立的团队在协作方面比在孤岛中更有效。 理想情况下&#xff0c;DevOps 团队共同努力改进…

App拉起微信小程序参考文章

App拉起微信小程序参考文章h5页面跳转小程序-----明文URL Scheme_weixin://dl/business/?appid*appid*&path*path*&qu-CSDN博客文章浏览阅读561次&#xff0c;点赞16次&#xff0c;收藏5次。仅需两步&#xff0c;就能实现h5跳转小程序&#xff0c;明文 URL Scheme&…

Java面试——Netty

优质博文&#xff1a;IT-BLOG-CN 一、BIO、NIO 和 AIO 【1】阻塞 IO(Blocking I/O)&#xff1a; 同步阻塞I/O模式&#xff0c;当一条线程执行 read() 或者 write() 方法时&#xff0c;这条线程会一直阻塞直到读取一些数据或者写出去的数据已经全部写出&#xff0c;在这期间这条…

HybridCLR热更新介绍

官方文档 参照视频 HybridCLR介绍 HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案 HybridCLR与ToLua/XLua、ILRuntime有什么不同 什么是游戏热更新&#xff1a;有热更的游戏更新流程 游戏热更新的种类 资源热更新&#xff1a;主要…

Stable Diffusion WebUI 中英文双语插件(sd-webui-bilingual-localization)并解决了不生效的情况

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 大家好&#xff0c;我是水滴~~ 本文介绍一款中英文对照插件 sd-webui-bilingual-localization&#xff0c;该插件可以让你的 Stable Diffusion WebUI 界面同时显示中文和英文&#xff0c;让我…

设计模式学习笔记 - 设计原则 - 10.实战:针对非业务的通用框架开发,如何做需求分析和设计及如何实现一个支持各种统计规则的性能计数器

前言 接下来我们在结合一个支持各种统计规则的性能计数项目&#xff0c;学习针对一个非业务的通用框架开发&#xff0c;如何来做需求分析、设计和实现&#xff0c;同时学习如何灵活应用各种设计原则。 项目背景 设计开发一个小的框架&#xff0c;能够获取接口调用的各种统计信…

Compose UI 之 MediumLarge TopAppBar

Medium&Large TopAppBar 前面文章介绍了 Small 类型的 TopAppBar&#xff1a;TopAppBar CenterAlignedTopAppBar 。下来介绍 Medium 和 Large 类型的 TopAppBar&#xff1a;MediumTopAppBar LargeTopAppBar 。 MediumTopAppBar 上面介绍了Small 类型的 TopAppBar (TopAp…

数字人ai直播软件突破AI大模型技术,改变未来科技格局!

数字人AI直播软件在AI大模型技术上的突破&#xff0c;将不可避免地改变未来科技格局。这一突破让人们看到了AI技术的无限可能性&#xff0c;并为未来的科技发展打开了新的大门。 AI大模型技术是近年来人工智能领域的一个热点&#xff0c;它通过构建庞大、复杂的神经网络模型&a…

海外互联网专线主要解决企业哪些办公问题?

海外互联网专线 是一种专门为跨境企业提供的网络连接服务&#xff0c;旨在解决企业在海外办公过程中遇到的各种网络问题。海外互联网专线如何成为解决企业办公难题的利器&#xff0c;为企业提供稳定、高速的网络连接? 1、跨国远程办公&#xff1a; 随着全球化进程的加速&…

SpringCloud Ribbon 负载均衡服务调用

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第三篇&#xff0c;即介绍 Ribbon 负载均衡服务调用 二、概述 2.1 Ribbon 是什么 Spring Cloud Ribbon…

【博士每天一篇文献-综述】Modular Brain Networks

阅读时间&#xff1a;2023-11-27 1 介绍 年份&#xff1a;2016 作者&#xff1a;Olaf Sporns&#xff0c;Richard Betzel&#xff0c;印第安纳大学心理与脑科学杰出教授 期刊&#xff1a; Annual review of psychology 引用量&#xff1a;1205 详细介绍了模块化大脑网络及其如…

在【IntelliJ IDEA】中配置【Tomcat】【2023版】【中文】【图文详解】

作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;IntelliJ IDEA为Web服务器提供了卓越的支持&#xff0c;从而极大地简化了程序员在Web开发过程中的工作流程。学习Java Web开发实质上就是掌握如何创造动态Web资源&#xff0c;这些资源在完成开发后&…

宠物空气净化器值得入手吗?选购宠物空气净化器关注哪些方面?

一开始养猫时&#xff0c;每天看着可爱的猫咪在家里快乐奔跑&#xff0c;让人心情愉悦。然而&#xff0c;作为铲屎官都知道&#xff0c;猫咪会掉毛&#xff0c;特别是在换毛期间&#xff0c;地板、沙发上都会有一大堆猫毛&#xff0c;甚至衣服也可能沾满猫毛。养猫家庭中&#…

Flink 物理执行图

文章目录 物理执行图一、Task二、ResultPartition三、ResultSubpartition四、InputGate五、InputChannel 物理执行图 JobManager根据ExecutionGraph对作业进行调度&#xff0c;并在各个TaskManager上部署任务。这些任务在TaskManager上的实际执行过程就形成了物理执行图。物理…

快速上手:使用Hexo搭建并自定义个人博客

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

算法---双指针练习-6(查找总价格为目标值的两个商品)

查找总价格为目标值的两个商品 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 算法的基本思想是首先初始化两个指针begin和end&#xff0c;分别指向数组的起始位置和末尾位置。 接下来&#xff0c;算法使用一个循环来移动e…

瑞芯微 | I2S-音频基础分享

1. 音频常用术语 名称含义ADC&#xff08;Analog to Digit Conversion&#xff09;模拟信号转换为数字信号AEC&#xff08;Acoustic Echo Cancellor&#xff09;回声消除AGC&#xff08;Automatic Gain Control&#xff09;自动增益补偿&#xff0c;调整MIC收音量ALSA&#xf…

Stable Diffusion 3报告

报告链接&#xff1a;https://stability.ai/news/stable-diffusion-3-research-paper 文章目录 要点表现架构细节通过重新加权改善整流流量Scaling Rectified Flow Transformer Models灵活的文本编码器RF相关论文 要点 发布研究论文&#xff0c;深入探讨Stable Diffuison 3的…

HarmonyOS 数据持久化 关系型数据库之 初始化操作

上文 HarmonyOS 数据持久化之首选项 preferences 我们有说用户首选项 但它只能处理一些比较简单的数据类型结构 的持久化处理 如果是一些批量较大 结构较为复杂的数据结构 那么 首选项就无法满足了 我们就要选择 关系型数据库 通过 SQLite 组件实现的一种本地数据库&#xff0…