图的邻接表的深度优先遍历具体代码
时间: 2023-09-04 09:08:04 浏览: 104
邻接表表示的图的深度优先遍历
5星 · 资源好评率100%
邻接表的深度优先遍历(DFS)可以使用递归或者栈来实现。下面是使用递归的具体代码:
```python
# 定义图的节点类
class Node:
def __init__(self, val=None, neighbors=None):
self.val = val
self.neighbors = neighbors if neighbors is not None else []
# 邻接表的深度优先遍历
def DFS(node, visited):
# 如果节点已经被访问过,则直接返回
if node in visited:
return
# 将当前节点标记为已访问
visited.add(node)
# 递归遍历当前节点的邻居节点
for neighbor in node.neighbors:
DFS(neighbor, visited)
```
其中,`node` 表示当前节点,`visited` 是一个集合,表示已经访问过的节点。
下面是使用栈来实现邻接表的深度优先遍历的具体代码:
```python
# 邻接表的深度优先遍历(非递归版)
def DFS(node):
# 如果节点为空,则直接返回
if not node:
return
# 使用栈来辅助遍历
stack = [node]
# 定义一个集合,用于记录已经访问过的节点
visited = set()
# 循环遍历栈中的节点
while stack:
# 取出栈顶节点,并将其标记为已访问
cur = stack.pop()
visited.add(cur)
# 遍历当前节点的邻居节点
for neighbor in cur.neighbors:
# 如果邻居节点没有被访问过,则将其加入栈中
if neighbor not in visited:
stack.append(neighbor)
return visited
```
其中,`node` 表示起始节点。这里使用了一个集合 `visited` 来记录已经访问过的节点,在遍历过程中,如果遇到已经访问过的节点,则直接跳过。使用栈来实现遍历,先将起始节点加入栈中,然后不断从栈中取出节点进行遍历,直到栈为空。
阅读全文