好故事慢慢来 发表于 2023-6-12 18:52:15

深度优先算法和广度优先算法

深度优先算法和广度优先算法是怎么实现的啊,有图片和原理吗

isdkz 发表于 2023-6-12 19:02:46

深度优先搜索(DFS)和广度优先搜索(BFS)是两种基础的图搜索算法。它们都是用于遍历或搜索图和树的数据结构的算法。以下是它们的基本实现和原理:

1. 深度优先搜索(DFS)
   
   在深度优先搜索中,你首先访问一个节点,然后递归地访问其所有未访问的相邻节点。你可以将其想象成正在尝试走出迷宫:你选择一个路径,然后一直沿着这条路径前进,直到到达死胡同,然后你会回退到上一个路口,选择另一条路继续前进。这就是“深度优先”的含义。

   下面是一个深度优先搜索的伪代码:

   DFS(node):
    if node is visited:
      return
    mark node as visited
    for each neighbor of node:
      DFS(neighbor)


   

2. 广度优先搜索(BFS)

   在广度优先搜索中,你首先访问一个节点,然后访问所有的未访问过的邻居节点,然后对这些邻居节点做同样的操作,如此类推。你可以将其想象成正在通过一个树形结构进行层次遍历:首先访问根节点,然后访问所有的子节点,然后访问所有的孙子节点,依此类推。这就是“广度优先”的含义。

   下面是一个广度优先搜索的伪代码:

   BFS(node):
    create a queue and enqueue node into it
    mark node as visited
    while queue is not empty:
      current_node = dequeue from queue
      for each neighbor of current_node:
            if neighbor is not visited:
                mark neighbor as visited
                enqueue neighbor into the queue


   

这两种算法在实际中有广泛的应用,如图遍历、路径查找、图的连通性检测等。

注意,以上伪代码和图片都是基于无向图的。对于有向图,这两种搜索算法的实现也是类似的,只不过在遍历邻居节点时需要考虑方向。

sfqxx 发表于 2023-6-12 19:07:10

深度优先算法(Depth-First Search,简称DFS)和广度优先算法(Breadth-First Search,简称BFS)是两种基本的图遍历算法。

深度优先算法

原理

深度优先算法通过栈实现,首先将起始节点压入栈中。然后每次弹出一个节点,如果该节点没有访问过,则将它的邻居节点压入栈中,并将其设置为已访问。继续重复以上步骤直到栈为空时遍历结束。

实现

以下是深度优先算法的 Python 代码实现:


def dfs(graph, start):
    stack =
    visited = set()
    while stack:
      node = stack.pop()
      if node not in visited:
            visited.add(node)
            stack.extend(graph - visited)
    return visited

广度优先算法

原理

广度优先算法通过队列实现,首先将起始节点加入队列中。然后每次从队列头取出一个节点,如果该节点没有访问过,则将它的邻居节点依次加入队列尾,并将其设置为已访问。重复以上步骤直到队列为空时遍历结束。

实现

以下是广度优先算法的 Python 代码实现:


from collections import deque

def bfs(graph, start):
    queue = deque()
    visited = set()
    while queue:
      node = queue.popleft()
      if node not in visited:
            visited.add(node)
            queue.extend(graph - visited)
    return visited

以上是深度优先算法和广度优先算法的实现及其原理。需要注意的是,在实际应用中,这两种算法的使用会根据具体问题有所不同。

歌者文明清理员 发表于 2023-6-12 19:31:50

sfqxx 发表于 2023-6-12 19:07
深度优先算法(Depth-First Search,简称DFS)和广度优先算法(Breadth-First Search,简称BFS)是两种基本 ...

gpt 可以生成图片了??
gpt4可以

sfqxx 发表于 2023-6-12 20:47:02

歌者文明清理员 发表于 2023-6-12 19:31
gpt4可以

完了,不得了了[哭]
页: [1]
查看完整版本: 深度优先算法和广度优先算法