C#数据结构与算法系列(十三):递归——迷宫问题
1.示例

2.代码实现
public class Maze
{
public static void Test()
{
int[][] map = new int[8][]; for (int i = 0; i < map.Length; i++)
{
map[i] = new int[7]; } for (int i = 0; i < 7; i++)
{
map[0][i] = 1; map[7][i] = 1;
} for (int i = 0; i < 8; i++)
{
map[i][0] = 1; map[i][6] = 1;
} map[3][1] = 1; map[3][2] = 1; System.Console.WriteLine("初始化地图\n"); for (int i = 0; i < map.Length; i++)
{
for (int j = 0; j < map[i].Length; j++)
{
System.Console.Write(map[i][j] + "\t");
} System.Console.WriteLine();
} SetWay(map, 1, 1); System.Console.WriteLine("\n小球走过,并标识过的地图情况\n"); for (int i = 0; i < map.Length; i++)
{
for (int j = 0; j < map[i].Length; j++)
{
System.Console.Write(map[i][j]+"\t");
} System.Console.WriteLine();
}
} /// <summary>
/// 1.map表示地图
/// 2.i,j表示地图的那个位置开始出发(1,1)
/// 3.如果小球能到map[6][5]位置,则说明通路找到
/// 4.约定:当map[i][j]为0表示该点没有走过,1表示为墙,2表示通路可以走,3表示该点已经走过,但是走不通
/// 5.在走迷宫时,需要确定一个策略(方法)下=》右=》上=》左,如果该点走不通,再回溯
/// </summary>
/// <param name="map">地图</param>
/// <param name="i">纵坐标</param>
/// <param name="j">横坐标</param>
protected static bool SetWay(int[][] map, int i, int j)
{
if (map[6][5] == 2) //表示通路
{
return true;
}
else
{
if (map[i][j] == 0)
{
map[i][j] = 2; //假设该点可以走通 if (SetWay(map, i + 1, j)) //向下走
{
return true;
}
else if (SetWay(map, i, j + 1)) //向右走
{
return true;
}
else if (SetWay(map, i - 1, j)) //向上走
{
return true;
}
else if (SetWay(map, i, j - 1)) //向左走
{
return true;
}
else
{
//说明该点走不通,是死路
map[i][j] = 3; return false;
}
}
else //如果map[i][j]!=0;那么就是1,2,3
{
return false;
}
}
}
}
3.效果图

C#数据结构与算法系列(十三):递归——迷宫问题的更多相关文章
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...
- 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解
数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...
- 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解
数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个 ...
- 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL
树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构. a.树是n ...
- 数据结构与算法系列——排序(4)_Shell希尔排序
1. 工作原理(定义) 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本.但希尔排序是非稳定排序算法. 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入 ...
- 看图轻松理解数据结构与算法系列(NoSQL存储-LSM树) - 全文
<看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的样子. 关于LSM树 ...
- 数据结构与算法系列研究七——图、prim算法、dijkstra算法
图.prim算法.dijkstra算法 1. 图的定义 图(Graph)可以简单表示为G=<V, E>,其中V称为顶点(vertex)集合,E称为边(edge)集合.图论中的图(graph ...
- 数据结构与算法系列----AC自己主动机
一:概念 首先简要介绍一下AC自己主动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之中的一个.一个常见的样例就是给出n个单词,再给出一段 ...
- 数据结构与算法系列----最小生成树(Prim算法&Kruskal算法)
一:Prim算法 1.概览 普里姆算法(Prim算法).图论中的一种算法.可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中.不但包含了连通图里的全部顶点(英语:Ve ...
- C#数据结构与算法系列(十二):递归(Recursion)
1.介绍 简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时也让代码变得整洁 2.规则 执行一个方法时,就创建一个新的受保护的独立空间(栈空间) 方法的 ...
随机推荐
- 征集 meme
当你每次兴致勃勃地和好友分享自己喜欢的歌但 Ta 不屑一顾 / 不喜欢时:
- P9481 [NOI2023] 贸易 题解
题目链接 题目要求我们求出任意两点间最短路径之和,由于图比较特殊,除树边外只有祖先到其子树内的边,我们首先考虑最短路径有没有什么特殊性质. 注意到两点之间的最短路分为一下三种: 节点到其祖先的最短路: ...
- mysql 代码适配 postgresql 适配改写,优化案例(行转列 + 标量子查询改写)
最近在适配个MySQL应用的项目,各种SQL改成PG兼容的语法真的是脑壳痛,今天遇到个有意思的案例. 原 MySQL SQL语句: SELECT DISTINCT l.MALL_NAME '项目', ...
- Kubernetes:kube-apiserver 之鉴权
kubernetes:kube-apiserver 系列文章: Kubernetes:kube-apiserver 之 scheme(一) Kubernetes:kube-apiserver 之 sc ...
- 提升运维效率:轻松掌握JumpServer安装和使用技巧
前言 JumpServer 是一个开源的跳板机的解决方案,提供了对远程服务器的安全访问.会话录制和审计.用户身份管理等功能,适用于需要管理机器资源&大量服务器资源的情况. 本文将在分享 doc ...
- Qt源码解析——元对象系统热身
关键词:Qt 源码 QObject QMetaObject 元对象系统 属性 事件 信号 槽 概述 原系列文章地址 官方文档第二章内容就是元对象系统,它在介绍里描述到: Qt的元对象系统提供了信号和槽 ...
- Java -- Stream流用法
1. 前言 流是Java 8 API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式. Stream流是从支持数据处理 ...
- KMeans算法全面解析与应用案例
本文深入探讨了KMeans聚类算法的核心原理.实际应用.优缺点以及在文本聚类中的特殊用途,为您在聚类分析和自然语言处理方面提供有价值的见解和指导. 关注TechLead,分享AI全维度知识.作者拥有1 ...
- 从零开始学习Python
从零开始学习Python是一个令人兴奋和有趣的过程.无论你是完全没有编程经验,还是已经熟悉其他编程语言,Python都可以成为你迈向程序员之路的理想起点. 首先,在开始学习之前,请确保在计算机上安装了 ...
- 关联规则挖掘:Apriori算法的深度探讨
在本文中,我们深入探讨了Apriori算法的理论基础.核心概念及其在实际问题中的应用.文章不仅全面解析了算法的工作机制,还通过Python代码段展示了具体的实战应用.此外,我们还针对算法在大数据环境下 ...