返回
图的遍历
前端
2023-09-18 06:48:19
图的遍历
图是一种数据结构,用于表示对象之间关系的集合。它可以用来表示各种各样的问题,例如社交网络、交通网络、分子结构等。
图的遍历是指访问图中的所有节点和边。有两种常见的图遍历算法:深度优先遍历和广度优先遍历。
深度优先遍历 (DFS)从一个节点开始,沿着一条路径走下去,直到到达末端。然后,它回溯到最近一个未访问过的节点,并从那里沿着另一条路径走下去。这个过程一直持续到图中所有节点都被访问过。
广度优先遍历 (BFS)从一个节点开始,访问该节点的所有相邻节点。然后,它访问所有这些相邻节点的相邻节点,依此类推。这个过程一直持续到图中所有节点都被访问过。
实现
深度优先遍历和广度优先遍历都可以用递归或迭代的方式实现。
递归实现
def dfs(graph, start):
visited = set()
def dfs_recursive(node):
if node in visited:
return
visited.add(node)
for neighbor in graph[node]:
dfs_recursive(neighbor)
dfs_recursive(start)
def bfs(graph, start):
visited = set()
queue = [start]
while queue:
node = queue.pop(0)
if node in visited:
continue
visited.add(node)
for neighbor in graph[node]:
queue.append(neighbor)
迭代实现
def dfs(graph, start):
visited = set()
stack = [start]
while stack:
node = stack.pop()
if node in visited:
continue
visited.add(node)
for neighbor in graph[node]:
stack.append(neighbor)
def bfs(graph, start):
visited = set()
queue = [start]
while queue:
node = queue.pop(0)
if node in visited:
continue
visited.add(node)
for neighbor in graph[node]:
queue.append(neighbor)
应用
图的遍历在许多领域都有应用,例如:
- 搜索算法:图的遍历可以用来搜索图中的特定节点或边。
- 路径查找:图的遍历可以用来查找图中两个节点之间的最短路径或所有路径。
- 连通分量:图的遍历可以用来找到图中的连通分量。
- 最小生成树:图的遍历可以用来找到图中的最小生成树。
结论
图的遍历是一种重要的算法,有广泛的应用。深度优先遍历和广度优先遍历是两种最常见的图遍历算法,它们都可以用递归或迭代的方式实现。