📅  最后修改于: 2023-12-03 15:10:02.635000             🧑  作者: Mango
在某些情况下,我们需要查找某个节点在一定距离内的所有邻居节点。这个问题可以通过深度优先搜索或广度优先搜索来解决。
深度优先搜索使用递归的方式实现,遍历整个图并找到所有距离目标节点不超过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
两种方法都可以解决这个问题,每种方法的实现都有优点和局限性。深度优先搜索对于大规模的图可能会出现堆栈溢出的问题,而广度优先搜索可能会占用过多的内存。根据具体的应用情况,我们需要选择合适的算法来解决问题。