📜  打印距离 K 内的所有邻居节点(1)

📅  最后修改于: 2023-12-03 15:10:02.635000             🧑  作者: Mango

打印距离 K 内的所有邻居节点

在某些情况下,我们需要查找某个节点在一定距离内的所有邻居节点。这个问题可以通过深度优先搜索或广度优先搜索来解决。

深度优先搜索实现

深度优先搜索使用递归的方式实现,遍历整个图并找到所有距离目标节点不超过K的邻居节点。

def dfs(graph, start, visited, k, distance):
    visited.add(start)
    if distance == k:
        print(start)
        return
    for neighbor in graph[start]:
        if neighbor not in visited:
            dfs(graph, neighbor, visited, k, distance+1)

def print_neighbors_within_k_distance(graph, start_node, k):
    visited = set()
    dfs(graph, start_node, visited, k, 0)
广度优先搜索实现

广度优先搜索使用队列的数据结构实现,首先将起始节点放入队列,并标记为visited。然后,从队列中取出一个节点并将它的所有未被visited过的邻居节点放入队列中。重复这个过程直到队列为空或者距离目标节点不超过K。

from collections import deque

def bfs(graph, start, k):
    visited = set()
    queue = deque([(start, 0)])
    while queue:
        node, distance = queue.popleft()
        if distance == k:
            print(node)
        if distance > k:
            break
        if node not in visited:
            visited.add(node)
            for neighbor in graph[node]:
                if neighbor not in visited:
                    queue.append((neighbor, distance+1))

def print_neighbors_within_k_distance(graph, start_node, k):
    bfs(graph, start_node, k)
测试
graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F'],
    'D': [],
    'E': ['F'],
    'F': ['G'],
    'G': ['E']
}

print_neighbors_within_k_distance(graph, 'A', 2)  # 输出 B C E
总结

两种方法都可以解决这个问题,每种方法的实现都有优点和局限性。深度优先搜索对于大规模的图可能会出现堆栈溢出的问题,而广度优先搜索可能会占用过多的内存。根据具体的应用情况,我们需要选择合适的算法来解决问题。