对图进行深度优先搜索和广度优先搜索遍历,并分别输出其遍历序列。用代码实现
时间: 2024-02-03 18:13:16 浏览: 19
假设我们的图用邻接表表示,其中节点编号从0开始,每个节点的相邻节点用列表存储。例如,对于如下的图:
```
0----1
|\ / |
| \/ |
| /\ |
|/ \ |
2----3
```
其邻接表表示为:
```
adj = [[1, 2],
[0, 2, 3],
[0, 1, 3],
[1, 2]]
```
深度优先搜索遍历的思路是从起始节点开始,依次遍历其相邻节点,并递归地遍历这些相邻节点的相邻节点,直到找到所有可达节点。广度优先搜索遍历的思路是从起始节点开始,依次遍历其相邻节点,并将这些相邻节点加入一个队列中,然后从队列中取出下一个节点继续遍历其相邻节点,直到找到所有可达节点。
下面是实现深度优先搜索遍历和广度优先搜索遍历的Python代码:
```python
def dfs(adj, visited, node, traversal):
visited[node] = True
traversal.append(node)
for neighbor in adj[node]:
if not visited[neighbor]:
dfs(adj, visited, neighbor, traversal)
def bfs(adj, start):
visited = [False] * len(adj)
queue = [start]
visited[start] = True
traversal = []
while queue:
node = queue.pop(0)
traversal.append(node)
for neighbor in adj[node]:
if not visited[neighbor]:
queue.append(neighbor)
visited[neighbor] = True
return traversal
# 测试
adj = [[1, 2], [0, 2, 3], [0, 1, 3], [1, 2]]
visited = [False] * len(adj)
traversal = []
dfs(adj, visited, 0, traversal)
print(traversal) # 输出: [0, 1, 2, 3]
traversal = bfs(adj, 0)
print(traversal) # 输出: [0, 1, 2, 3]
```
其中,`dfs`函数实现了深度优先搜索遍历,`bfs`函数实现了广度优先搜索遍历。`visited`数组用于记录每个节点是否已经被访问过,`traversal`数组用于存储遍历序列。在`dfs`函数中,我们首先将当前节点标记为已访问,并加入遍历序列中。然后递归地遍历该节点的相邻节点,如果某个相邻节点未被访问,则继续递归遍历该节点。在`bfs`函数中,我们使用队列来存储待访问的节点。首先将起始节点加入队列中,并标记为已访问。然后从队列中取出下一个节点,将其加入遍历序列中,并遍历该节点的相邻节点,将未访问的相邻节点加入队列中。重复该过程,直到队列为空。
以上代码中,我们以节点0为起始节点进行遍历,输出了深度优先搜索遍历和广度优先搜索遍历的结果。