Python 中的 Lee 算法2024年8月29日 | 阅读 7 分钟 在本教程中,我们将学习 Lee 算法,它用于解决迷宫路由问题。我们将使用 Python 编程语言来实现此算法。迷宫路由问题是最有趣且常被问到的编程问题之一。Lee 算法是基于广度优先搜索算法的解决迷宫问题的几种方法之一。现在,让我们来理解问题陈述。 问题陈述在此问题中,给定一个二进制矩形矩阵形式的迷宫,我们需要找到给定源单元到目标单元的最短路径。迷宫表示为 MxN 矩阵,其中每个元素可以是 0 或 1。只有当值为 1 时,我们才能创建路径。在任何给定时间,我们可以在四个方向中的一个方向移动一步。有效步骤将是 - 向上移动:(x, y) --> (x - 1, y) 让我们以更好的方式解释它,以便我们能够轻松理解。假设给定的矩阵如下 - 输入 - 输出 Length of the shortest path is 3 解决方案方法要解决此类问题,我们将使用基于广度优先搜索 (BFS) 过程的 Lee 算法。我们将使用队列和矩阵来识别哪些单元已被访问,并重复此过程,直到找到从源单元到目标单元的最短路径。 BFS 是寻找最短路径的最佳技术之一,因为它不是一次考虑一条路径;相反,它考虑从源开始的所有路径,并同时在所有这些路径上前进一个单位。让我们来理解这个算法。 算法
伪代码 让我们来理解 Lee 算法的伪代码。 初始化移动数组=> 解释 - 在上面的伪代码中,我们首先创建两个数组 rowNums 和 colNum,它们用于通过将这些数组的值添加到当前单元坐标来访问当前单元的所有四个相邻单元。
现在将上述伪代码实现到 Python 代码中。 Python 代码 输出 Length of the Shortest Path is: 3 解释 - 在代码中,我们从“collections”模块导入“deque”和“namedtuple”类。 “ROW”和“COL”变量在开始时定义,用于设置迷宫的尺寸。“namedtuple”类用于创建两个自定义类“Cell”和“Node”,它们分别存储有关迷宫中单元的坐标以及到源的距离的信息。 “LeeAlgo”函数接收三个参数:代表迷宫的二维矩阵,“src”单元和“dest”单元。函数首先检查源单元和目标单元是否有效(即,它们在矩阵中是否设置为 1)。如果不是,则函数返回 -1。 然后,函数初始化一个名为“visited”的二维布尔数组,用于跟踪迷宫中哪些单元已被访问。源单元被标记为已访问。 创建一个“deque”,并将源单元添加到其中,距离为 0。然后,一个 while 循环迭代 deque,使用广度优先搜索 (BFS) 来探索迷宫。循环持续到 deque 为空。 对于每次迭代,函数会检查当前单元是否为目标单元。如果是,则返回到源的距离。否则,函数会查看所有相邻单元(上、下、左、右),如果单元有效(即,在矩阵中设置为 1 且尚未被访问),则将其添加到 deque 并标记为已访问。 最后,如果在源到目标的路径未找到,则函数返回 -1。 在代码的最后,创建了一个矩阵来表示迷宫,并定义了源和目标坐标。使用这些输入调用“LeeAlgo”函数,并打印出从源到目标的距离。 复杂度分析在上述解决方案中,我们逐个遍历每个单元,直到到达目标单元。所有这些过程导致 0(MxN) 的时间复杂度,其中 M 和 N 是矩阵的维度。另外,由于我们需要一个额外的 MxN 矩阵来存储单元的访问状态,因此空间复杂度也为 O(MxN)。 |
| 自动化测试 人类在多次做同样的工作时会感到厌烦。我们总是在寻找克服它的方法。所以一个解决方案摆在我们面前:我们可以创建一些东西来做这种任务,...
阅读9分钟
以下教程基于数据分析;我们将详细讨论方差分析(ANOVA),以及在Python编程语言中执行该过程。ANOVA通常用于心理学研究。在以下教程中,我们将理解如何……
阅读 13 分钟
在当今的机器学习和数据科学领域,接触到各种独特的 Python 工具出奇地容易。这些包包括 scikit-learn、NumPy 或 Pandas,它们在内存使用或处理时间方面无法很好地随着数据量扩展。这是可以预期的...
阅读9分钟
尽管这种计算语言存在一些众所周知的问题,但它仍被认为是世界上最好、使用最频繁的语言之一。Python 的哪些独特品质使其在全球范围内具有如此巨大的重要性?你可以在这个列表中找到这个问题的答案...
阅读 6 分钟
在本教程中,我们将编写用于股票跨度问题的Python程序。这是一个在技术面试中经常出现的非常流行的编程问题。股票跨度问题是一个金融挑战,涉及分析一系列N个每日报价...
7 分钟阅读
在深入探讨主题之前,让我们先了解一下字符串是什么以及JSON是什么?字符串:是一系列用反引号表示的字符。它们是不可变的,这意味着一旦声明就无法更改。JSON:代表...
阅读 3 分钟
Python 提供了基本的 for 循环来打印图案。第一个外层循环管理行数,而内层嵌套循环管理列数。通过修改 print 语句,可以打印出新的数字图案、单词图案和星形图案。本文将展示一个...
阅读 4 分钟
在本教程中,我们将讨论在 Python 程序中不使用第三个变量来交换两个变量(n1 和 n2)的不同方法。示例:P: 112 Q: 211 交换 P 和 Q 后:P: 211 Q: 112 方法 1:使用内置方法 内置方法可以处理任何数据类型...
阅读 3 分钟
- Cookie 的设置方法 Cookie 的处理是 Web 应用程序的一个重要概念。Django 提供了与 Cookie 交互的简单方法。Cookie 允许我们存储和检索保存在会话中的数据。会话和 Cookie 与……
阅读 6 分钟
在接下来的教程中,我们将通过一些示例了解 Python 编程语言中 epoch 到 DateTime 的转换。我们将使用 Python epoch 来分别将 epoch 转换为日期和时间。我们还将涵盖以下主题:将 DateTime 转换为 epoch...
阅读 10 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India