深度优先搜索(DFS)和广度优先搜索(BFS)是两种常见的图遍历算法。

深度优先搜索可以理解为从一个起点开始,一直走下去,直到不能再走为止,然后回溯到上一个未曾探索完的节点,继续向下探索。这个过程可以看作是沿深度方向遍历图或树结构。在DFS算法中,需要使用一个栈来保存已经探索的节点,以便进行回溯。DFS算法的时间复杂度为O(V+E),其中V表示节点数,E表示边数。

广度优先搜索可以理解为从一个起点开始,按照距离逐层扩展,先访问距离起点最近的所有节点。这个过程可以看作是沿宽度方向遍历图或树结构。在BFS算法中,需要使用一个队列来保存已经探索但还未被访问的节点。BFS算法的时间复杂度为O(V+E),其中V表示节点数,E表示边数。

简而言之,深度优先搜索是优先遍历深度方向,即尽可能往深处探索;而广度优先搜索则是优先遍历广度方向,即尽可能多地探索与起点距离相近的节点。

相关示例代码:

深度优先:

# 定义节点类
class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children if children is not None else []

# 深度优先遍历算法实现
def dfs(node: 'Node') -> List[int]:
    res = []
    stack = [node]  # 定义栈,并将根节点加入栈中

    while stack:
        cur = stack.pop()    # 取出栈顶元素
        res.append(cur.val)  # 将当前节点值保存到结果集中

        # 将当前节点的所有子节点逆序加入栈中,保证下一次取出的节点是最左边的子节点
        for child in cur.children[::-1]:
            stack.append(child)

    return res

广度优先:

# 定义节点类
class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children if children is not None else []

# 广度优先遍历算法实现
def bfs(node: 'Node') -> List[int]:
    res = []
    queue = [node]  # 定义队列,并将根节点加入队列中

    while queue:
        cur = queue.pop(0)   # 取出队首元素
        res.append(cur.val)  # 将当前节点值保存到结果集中

        # 将当前节点的所有子节点依次加入队列尾部
        for child in cur.children:
            queue.append(child)

    return res

上述代码是一个Python语言实现的广度优先搜索算法。同样地,定义了一个节点类,每个节点包含一个值属性和一个子节点列表属性。在算法中我们使用一个队列来保存待访问节点,从而按照层次遍历整个树。该算法的时间复杂度为O(N),其中N是节点数。

以上就是深度优先和广度优先算法的示例代码,希望可以帮助理解这两种图遍历算法。