以邻接矩阵和邻接表的方式存储连通图。然后分别用深度优先算法和广度优先算法遍历该连通图。
时间: 2023-11-27 16:51:08 浏览: 124
建立图的邻接矩阵或邻接表存储并在此基础上实现图的深度优先遍历和广度优先遍历.doc
5星 · 资源好评率100%
首先,我们需要了解一下邻接矩阵和邻接表的概念:
邻接矩阵:用一个二维数组来表示图中各个节点之间的关系,如果节点 i 与 j 之间有边相连,则矩阵中第 i 行第 j 列为 1,否则为 0。
邻接表:用一个链表数组来表示图中各个节点之间的关系,每个节点的邻居节点都记录在该节点的链表中。
接下来,我们可以按照以下步骤来遍历连通图:
1. 从任意一个节点开始遍历。
2. 将该节点标记为已访问。
3. 对于该节点的每一个没有访问过的邻居节点,递归执行步骤 2 和 3。
深度优先算法(DFS):
1. 使用邻接表或邻接矩阵存储图。
2. 从任意一个未被访问的节点开始,递归地访问该节点的所有邻居节点。
3. 如果所有邻居节点都已被访问,则回溯到上一个节点,继续递归访问邻居节点。
4. 直到遍历完所有节点。
下面是以邻接表方式存储的 DFS 代码实现:
```python
def DFS(node, visited, graph):
visited[node] = True
print(node, end=' ')
for neighbor in graph[node]:
if not visited[neighbor]:
DFS(neighbor, visited, graph)
def traverse(graph):
visited = [False] * len(graph)
for i in range(len(graph)):
if not visited[i]:
DFS(i, visited, graph)
```
广度优先算法(BFS):
1. 使用邻接表或邻接矩阵存储图。
2. 从任意一个未被访问的节点开始,将该节点加入队列。
3. 对于队列中的每个节点,访问其所有邻居节点,并将其邻居节点加入队列。
4. 将已访问过的节点出队列。
5. 直到遍历完所有节点。
下面是以邻接表方式存储的 BFS 代码实现:
```python
from collections import deque
def BFS(start, visited, graph):
queue = deque()
queue.append(start)
visited[start] = True
while queue:
node = queue.popleft()
print(node, end=' ')
for neighbor in graph[node]:
if not visited[neighbor]:
visited[neighbor] = True
queue.append(neighbor)
def traverse(graph):
visited = [False] * len(graph)
for i in range(len(graph)):
if not visited[i]:
BFS(i, visited, graph)
```
注意:以上代码仅适用于连通图,如果图不连通,需要对每个连通分量都执行一次遍历操作。
阅读全文