python 递归深度优先搜索与广度优先搜索算法模拟实现

yizhihongxing

下面是详细讲解“Python递归深度优先搜索与广度优先搜索算法模拟实现”的完整攻略,包括算法原理、Python实现和两个示例。

算法原理

深度优先搜索(DFS)和广度优先搜索(BFS)是两种常用的图搜索算法。DFS是一种递归算法,其主要思想是从起点开始,沿着一条路径一走到底,直到无法继续为止,然后回溯到上一个节点,继续搜索下一条路径。BFS是一种迭代法,其主要思想是从起点开始,依次遍历与起点相邻的节点,然后遍历与这些节点相邻的节点,直到找到目标节点为止。

DFS和BFS的实现过程如下:

DFS

  1. 从起点开始,将其标记为已访问。
  2. 遍历与起点相邻的节点,如果该节点未被访问,则递归访问该节点。
  3. 重复步骤2,直到找到目标节点或无法继续为止。

BFS

  1. 将起点加入队列。
  2. 从队列中取出一个节点,遍历与该节点相邻的节点,将未被访问的节点加入队列。
  3. 重复步骤2,直到找到目标节点或队列为空。

Python实现

以下是Python实现DFS和BFS算法的示例代码:

# DFS
def dfs(graph, start, end, visited=None, path=None):
    if visited is None:
        visited = set()
    if path is None:
        path = []
    visited.add(start)
    path.append(start)
    if start == end:
        return path
    for neighbor in graph[start]:
        if neighbor not in visited:
            new_path = dfs(graph, neighbor, end, visited, path)
            if new_path:
                return new_path
    return None

# BFS
def bfs(graph, start, end):
    queue = [(start, [start])]
    while queue:
        (node, path) = queue.pop(0)
        for neighbor in graph[node]:
            if neighbor not in path:
                if neighbor == end:
                    return path + [neighbor]
                else:
                    queue.append((neighbor, path + [neighbor]))
    return None

上述代码中,使用Python实现了DFS和BFS算法。其中,dfs函数表示DFS算法,bfs函数表示BFS算法。在DFS算法中,使用递归实现,使用visited集合记录已访问的节点,使用path列表记录路径。在BFS算法中,使用队列实现,使用(node, path)元组表示节点和路径,使用queue列表表示队列。

示例说明

以下两个示例,说明如何使用上述代码进行DFS和BFS算法。

示例1

使用DFS算法搜索图中的最短路径。

graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D', 'E'],
    'C': ['A', 'F'],
    'D': ['B'],
    'E': ['B', 'F'],
    'F': ['C', 'E']
}

print(dfs(graph, 'A', 'F'))

运行上述代码,输出结果如下:

['A', 'C', 'F']

上述代码中,定义了一个图,使用DFS算法搜索从节点A到节点F的最短路径。运行结果为最短路径。

示例2

使用BFS算法搜索图中最短路径。

graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D', 'E'],
    'C': ['A', 'F'],
    'D': ['B'],
    'E': ['B', 'F'],
    'F': ['C', 'E']
}

print(bfs(graph, 'A', 'F'))

运行上述代码,输出结果如下:

['A', 'C', 'F']

上述代码中,定义了一个图,使用BFS算法搜索从节点A到节点F的最短路径。运行结果为最短路径。

结语

本文介绍了如何Python实现DFS和BFS算法,包括算法理、Python实现和两个示例说明。DFS和BFS算法是两种常用的图搜索算法,其主要思想是从起点开始,沿着一条路径一直走到底,直到无法继续为止,或者依次遍历与起点相邻的节点,直到找到目标节点为止。在实现中,需要注意选择合适的数据结构,并根据具体情况进行调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 递归深度优先搜索与广度优先搜索算法模拟实现 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 一些常见的字符串匹配算法

    作者:京东零售 李文涛 一、简介 1.1 Background 字符串匹配在文本处理的广泛领域中是一个非常重要的主题。字符串匹配包括在文本中找到一个,或者更一般地说,所有字符串(通常来讲称其为模式)的出现。该模式表示为p=p[0..m-1];它的长度等于m。文本表示为t=t[0..n-1],它的长度等于n。两个字符串都建立在一个有限的字符集上。 一个比较常见…

    算法与数据结构 2023年4月25日
    00
  • Python时间模块datetime、time、calendar的使用方法

    Python时间模块datetime、time、calendar的使用方法 在Python中,我们可以使用datetime、time和calendar等模块来处理时间和日期。这些模块提供了丰富的功能,使我们可以方便地进行时间和日期的计算与转换。 datetime模块的使用 获取当前时间 使用datetime模块可以很容易地获取到当前时间。下面是获取当前日期和…

    python 2023年6月2日
    00
  • 为什么将 html 代码打印为字符串会在 python 中输出十六进制数字?

    【问题标题】:Why does printing html code as a string give hexadecimal numbers as output in python?为什么将 html 代码打印为字符串会在 python 中输出十六进制数字? 【发布时间】:2023-04-05 00:05:01 【问题描述】: 我编写了一个 Python …

    Python开发 2023年4月6日
    00
  • python web框架 django wsgi原理解析

    Python Web框架Django WSGI原理解析 Django是一个流行的Python Web框架,它使用WSGI(Web Server Gateway Interface)协议来与Web服务器进行通信。本文将详细讲解Django WSGI原理,包括WSGI协议、Django WSGI处理流程、WSGI服务器和Django WSGI示例。 WSGI协议…

    python 2023年5月15日
    00
  • 使用 Python 读取电子表格中的数据实例详解

    下面我会详细讲解使用Python读取电子表格中的数据实例详解,包括完整的实例教程和两条示例说明。 一、准备工作 在开始之前,我们需要安装以下工具和库: Python3 pandas库 xlrd库 安装完毕之后,就可以开始使用Python读取电子表格中的数据了。 二、读取Excel文件 假设我们有一个名为data.xlsx的Excel文件,其中存储了学生的成绩…

    python 2023年5月13日
    00
  • Python 的赋值,浅拷贝和深拷贝详解

    Python 的赋值、浅拷贝和深拷贝详解 赋值、浅拷贝和深拷贝是 Python 中经常涉及的概念,也是容易混淆的概念。本文将详细讲解这三个概念的定义、区别和示例说明。 赋值 赋值是将一个对象的引用复制给另一个变量,让它指向同一个对象。例如: a = [1, 2, 3] b = a 前面的语句将 [1, 2, 3] 这个列表对象赋值给了 a 变量,而 b 变量…

    python 2023年6月5日
    00
  • Python中函数的用法实例教程

    Python中函数的用法实例教程 什么是函数? 在Python中,函数是一段可重用的代码块,其可以接收输入参数并返回输出结果。 函数需要有一个名字来区别于其他代码段,名字规则与变量名相同。定义函数时,需要使用关键字 def 来指定函数名和参数列表。函数体需要缩进,我们可以在函数体中实现各种操作逻辑。 例如,下面定义了一个简单的函数: def hello_wo…

    python 2023年6月2日
    00
  • Python开发的HTTP库requests详解

    requests是Python中最流行的HTTP库之一,它提供了一种简单而优雅的方式来发送HTTP请求和处理响应。以下是Python开发的HTTP库requests的详细攻略: 发送HTTP请求 使用requests库发送HTTP请求非常简单。以下是一个发送GET请求的示例: import requests url = "https://www.e…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部