golang 迷宫回溯算法(递归)

 

// @Author sunwenbo
// 2024/4/14 20:13
package mainimport "fmt"// 编程一个函数,完成老鼠找出路
// myMap *[8][7]int 地图,保证是同一个地图,因此是引用类型
// i,j表示对地图的哪个点进行测试
func SetWay(myMap *[8][7]int, i int, j int) bool {// 分析出什么情况下就找到出路了// myMap[6][5] == 2if myMap[6][5] == 2 {return true} else {// 说明要继续找if myMap[i][j] == 0 { //如果这个点是可以探测的// 假设这个点是通的,但是需要探测上下左右// 换一个策略,向右上myMap[i][j] = 2if SetWay(myMap, i+1, j) { // 下return true} else if SetWay(myMap, i, j+1) { // 右return true} else if SetWay(myMap, i-1, j) { //上return true} else if SetWay(myMap, i, j-1) { // 左return true} else { //走不通myMap[i][j] = 3return false}} else { //说明这个点不能探测,为1,是墙return false}}
}func listMap(myMap *[8][7]int) {// 输出地图for i := 0; i < len(myMap); i++ {for j := 0; j < len(myMap[j]); j++ {fmt.Print(myMap[i][j], " ")}fmt.Println()}
}
func main() {//先创建一个二维数组,模拟一个迷宫地图// 规则// 1. 如果元素的值为1,代表墙// 2. 如果元素的值为0,代表路还没有探测过的路经// 3. 如果元素的值为2,代表可以走通的路// 4. 如果元素的值为3,代表曾经走过,但是是一条死路var myMap [8][7]intfor i := 0; i < len(myMap); i++ {for j := 0; j < len(myMap[0]); j++ {if i == 0 || i == len(myMap)-1 || j == 0 || j == len(myMap[0])-1 {myMap[i][j] = 1}}}myMap[3][1] = 1myMap[3][2] = 1将路堵死的情况下//myMap[1][2] = 1//myMap[2][2] = 1fmt.Println("地图:")listMap(&myMap)fmt.Println("##################")// 测试一下SetWay(&myMap, 1, 1)listMap(&myMap)}

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

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

相关文章

网络基础-基于TCP协议的Socket通讯

一、Socket通讯基于TCP协议流程图 UDP 的 Socket 编程相对简单些不在介绍。 二、 服务端程序启动 服务端程序要先跑起来&#xff0c;然后等待客户端的连接和数据。 服务端程序首先调用 socket() 函数&#xff0c;创建网络协议为 IPv4&#xff0c;以及传输协议为 TCP 的…

基于XML配置bean(二)

文章目录 1.工厂中获取bean1.静态工厂1.MyStaticFactory.java2.beans.xml3.测试 2.实例工厂1.MyInstanceFactory.java2.beans.xml3.测试 3.FactoryBean&#xff08;重点&#xff09;1.MyFactoryBean.java2.beans.xml3.测试 2.bean配置信息重用继承抽象bean1.beans.xml2.测试 3.…

HarmonyOS实战开发-如何实现一个简单的健康生活应用

功能概述 成就页面展示用户可以获取的所有勋章&#xff0c;当用户满足一定的条件时&#xff0c;将点亮本页面对应的勋章&#xff0c;没有得到的成就勋章处于熄灭状态。共有六种勋章&#xff0c;当用户连续完成任务打卡3天、7天、30天、50天、73天、99天时&#xff0c;可以获得…

SpringBoot框架——8.MybatisPlus常见用法(常用注解+内置方法+分页查询)

1.MybatisPlus常用注解&#xff1a; 1.1 当数据库、表名和字段名和实体类完全一致时无需加注解&#xff0c;不一致时&#xff1a; TableName指定库名 TableId指定表名 TableField指定字段名 1.2 自增主键&#xff1a; TableId(typeIdType.AUTO) private Long id; 1.3 实体类中属…

2000-2022年各省人力资本水平数据(含原始数据+计算过程+计算结果)(无缺失)

2000-2022年各省人力资本水平数据&#xff08;含原始数据计算过程计算结果&#xff09; 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;普通高等学校在校学生数(万人)、年末常住人口&#xff08;万人&#xff09;、人力资本水平 4、范…

CTFshow-PWN-前置基础(pwn20)

提交ctfshow{【.got表与.got.plt是否可写(可写为1&#xff0c;不可写为0)】,【.got的地址】,【.got.plt的地址】 前置基础知识&#xff1a; .got 和 .got.plt 是 ELF&#xff08;Executable and Linkable Format&#xff0c;可执行和可链接格式&#xff09;二进制文件中的两个…

(四)qt中使用ffmpeg播放视频,可暂停恢复

一、在qt中添加ffmpeg库及头文件 INCLUDEPATH /usr/local/ffmpeg/include LIBS -L/usr/local/lib -lavutil -lavcodec -lavformat -lswscale 二、详细代码 FFempegVideoDecode 视频解码类&#xff08;放入线程中&#xff09; ffmpegvideodecode.h #ifndef FFMPEGVIDEODE…

Qt | 自定义事件第三节

Qt | 事件第一节Qt | 事件第二节书接上回 六、自定义事件与事件的发送 1、发送事件由以下两个函数完成 static void QCoreApplication::postEvent (QObject* receiver, QEvent* event, int priority=Qt::NormalEventPriority);

RHCE作业二

一.配置server主机要求如下&#xff1a; 1.server主机的主机名称为 ntp_server.example.com 2.server主机的IP为&#xff1a; 172.25.254.100 3.server主机的时间为1984-11-11 11&#xff1a;11&#xff1a;11 4.配置server主机的时间同步服务要求可以被所有人使用 二.设定cli…

C++高级特性:可变长模板参数和折叠表达式(八)

1、可变长参数模板 可变长参数是C类模板编程中非常重要的一个东西&#xff0c;也是C11引入的新特性&#xff0c;通过使用…来表示参数长度不固定 可以通过sizeof…(args)获取传入参数的个数数量 &&表示万能引用&#xff0c;需要注意的是如果不使用万能引用&#xff0…

JVM基础面试题第一篇

目录 内存区域面试与分析 1.运行时数据区是什么 2.Java虚拟机栈的作用 3.本地方法栈的作用 4.堆的作用 5.方法区作用 6.运行时常量池的作用 7.直接内存是什么 8.内存溢出和内存泄漏的区别 9.栈溢出的原因 10.方法区溢出的原因 垃圾回收器与内存分配策略-面试与分析 …

LeetCode 49.字母异位词分组

目录 题目描述 方法一 思路&#xff1a; 代码&#xff1a; 题目描述 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", &qu…

Http 请求偶发400错误

1. 背景 生产环境偶发400请求错误&#xff0c;发生概率万分之一&#xff0c;异常信息如下&#xff1a; 1&#xff09; 从异常信息可以看到&#xff0c;skywalking的sw8 header解析失效导致异常信息。 2&#xff09; 0x0d0x0a 作为回车换行符号&#xff0c;没有被正确处理&#…

OpenGL:图元

OpenGL的图元 点 GL_POINTS: 将顶点绘制成单个的点 线 GL_LINES:将顶点用于创建线段,2个点成为一条单独的线段。如果顶点个数是奇数,则忽略最后一个。 顶点:v0, v1, v2, v3, … , vn,线段:v0-v1, v2-v3, v4-v5, … , vn-1 - vn GL_LINE_STRIP:将顶点用于创建线段,…

谈谈Python中的分布式计算和大数据处理

谈谈Python中的分布式计算和大数据处理 Python作为一种通用、解释型的高级编程语言&#xff0c;因其简洁易读、强大的库支持和广泛的应用领域&#xff0c;近年来在分布式计算和大数据处理领域也获得了显著的关注和应用。 分布式计算是一种计算方法&#xff0c;它将大型问题划…

学习笔记(4月18日)vector底层模拟实现(1)

1.迭代器 vector实际上是由迭代器进行维护的&#xff0c;关于迭代器是什么&#xff0c;为什么要叫这个名字&#xff0c;后面的学习会逐渐了解&#xff0c;现在先将迭代器是作为指针即可。 vector底层有三个迭代器&#xff0c;用来起到容量、数组头、元素个数的作用。 同时为…

带头节点的单链表练习(写加注释花了5小时,已废)

目录 1.test.c 2.LinList.c 3.LinList.h 1.test.c 单链表的操作 #include "LinList.h" //head->a0(头节点)->a1->...->ai->...->an int main() {SLNode* head;int i;DataType x, y;ListInitiate(&head);//初始化链表for (i 1; i < 11;…

基于XML配置bean(一)

文章目录 1.获取bean的两种方式1.通过id获取bean&#xff08;前面用过&#xff09;2.通过类型获取bean&#xff08;单例时使用&#xff09;1.案例2.代码1.beans.xml2.SpringBeanTest.java3.结果 3.注意事项 2.三种基本依赖注入方式1.通过属性配置bean&#xff08;前面用过&…

DDoS攻击趋势分析及防御建议:网络安全新挑战与应对策略

在数字化日益普及的今天&#xff0c;网络安全问题日益凸显。其中&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击以其巨大的破坏力和难以防范的特性&#xff0c;发起简单、效果显著、难以追踪等特点&#xff0c;因此被黑客广泛使用&#xff0c;已经成为网络安全领…

Python(九十四)变量的作用域

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…