建立一个有向图的邻接链表表示,实现对图广度优先遍历
时间: 2023-06-24 08:09:16 浏览: 107
邻接表表示的图的广度优先遍历演示
5星 · 资源好评率100%
首先,我们需要定义一个图的数据结构,包含节点个数和邻接链表:
```python
class Graph:
def __init__(self, num_of_vertices):
self.num_of_vertices = num_of_vertices
self.adjacency_list = [[] for _ in range(num_of_vertices)]
def add_edge(self, v, w):
self.adjacency_list[v].append(w)
```
接下来,我们可以使用一个队列来实现广度优先遍历,从起始节点开始,将其加入队列中,然后遍历其相邻节点,将其加入队列中,再依次遍历相邻节点的相邻节点,直到队列为空。
```python
from collections import deque
def bfs(graph, start):
visited = [False] * graph.num_of_vertices
queue = deque([start])
visited[start] = True
while queue:
vertex = queue.popleft()
print(vertex, end=" -> ")
for adjacent_vertex in graph.adjacency_list[vertex]:
if not visited[adjacent_vertex]:
visited[adjacent_vertex] = True
queue.append(adjacent_vertex)
```
最后,我们可以创建一个图并测试广度优先遍历的代码:
```python
g = Graph(4)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 0)
g.add_edge(2, 3)
g.add_edge(3, 3)
print("BFS traversal:")
bfs(g, 2)
```
输出结果为:
```
BFS traversal:
2 -> 0 -> 3 -> 1 ->
```
阅读全文