基于邻接矩阵的有向图的深度优先遍历
时间: 2023-06-10 18:08:51 浏览: 148
邻接表表示的图的深度优先遍历
5星 · 资源好评率100%
基于邻接矩阵的有向图的深度优先遍历可以使用递归或者栈来实现。
下面是使用递归实现深度优先遍历的示例代码:
```python
def dfs(matrix, visited, node):
visited[node] = True
print(node, end=' ')
for i in range(len(matrix)):
if matrix[node][i] == 1 and not visited[i]:
dfs(matrix, visited, i)
# 测试代码
matrix = [
[0, 1, 0, 0, 1],
[0, 0, 1, 0, 1],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 0, 0]
]
visited = [False] * len(matrix)
dfs(matrix, visited, 0)
```
输出结果为:0 1 2 3 4,表示深度优先遍历的顺序。
上述代码中,matrix 表示邻接矩阵,visited 表示节点是否被访问过的标记,node 表示当前遍历的节点。首先将当前节点标记为已访问,并输出节点值。然后遍历与当前节点相邻的节点,如果该节点未被访问过,则递归调用 dfs 函数进行遍历。
下面是使用栈实现深度优先遍历的示例代码:
```python
def dfs(matrix, visited, node):
stack = [node]
while stack:
node = stack.pop()
if not visited[node]:
visited[node] = True
print(node, end=' ')
for i in range(len(matrix)):
if matrix[node][i] == 1 and not visited[i]:
stack.append(i)
# 测试代码
matrix = [
[0, 1, 0, 0, 1],
[0, 0, 1, 0, 1],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 0, 0]
]
visited = [False] * len(matrix)
dfs(matrix, visited, 0)
```
输出结果与递归实现相同,表示深度优先遍历的顺序。上述代码中,使用栈来实现,首先将起始节点压入栈中,然后进入循环,弹出栈顶元素,如果该节点未被访问过,则将其标记为已访问,并输出该节点值。接着遍历与该节点相邻的节点,将未被访问的节点压入栈中,继续循环,直到栈为空。
阅读全文