数据结构,建立一个有向图,分别利用深度优先遍历和广度优先遍历方式实现图的遍历
时间: 2023-06-22 16:20:48 浏览: 129
好的,这个问题不难,我来给您讲解一下。
首先,我们需要用一个邻接表来表示这个有向图。邻接表是一个数组,其中每个元素对应一个顶点,每个元素存储与该顶点相邻的所有顶点。例如,如果顶点 1 与顶点 2、3 相邻,那么邻接表中第 1 个元素就存储一个链表或数组,其中包含 2 和 3。
接下来,我们来看深度优先遍历(DFS)的实现。DFS 遍历过程中,从起点开始,尽可能深地访问每个可达的节点,直到到达最深的节点,然后回溯到前一个节点,继续访问其他可达节点。具体实现如下:
```python
def dfs(graph, start):
visited = set() # 用一个集合来记录已经访问过的节点
stack = [start] # 用一个栈来记录待访问的节点
while stack:
node = stack.pop() # 取出栈顶元素
if node not in visited:
print(node, end=' ')
visited.add(node)
for neighbor in graph[node]: # 将当前节点的所有邻居入栈
if neighbor not in visited:
stack.append(neighbor)
```
接下来,我们来看广度优先遍历(BFS)的实现。BFS 遍历过程中,从起点开始,先访问所有与起点距离为 1 的节点,然后访问所有与起点距离为 2 的节点,依此类推。具体实现如下:
```python
def bfs(graph, start):
visited = set() # 用一个集合来记录已经访问过的节点
queue = [start] # 用一个队列来记录待访问的节点
while queue:
node = queue.pop(0) # 取出队首元素
if node not in visited:
print(node, end=' ')
visited.add(node)
for neighbor in graph[node]: # 将当前节点的所有邻居入队
if neighbor not in visited:
queue.append(neighbor)
```
好了,以上就是建立有向图并用 DFS 和 BFS 实现图的遍历的过程,希望能对您有所帮助!
阅读全文