对以邻接矩阵为存储结构的图进行 DFS 和 BFS 遍历
时间: 2023-06-15 14:08:13 浏览: 99
以邻接矩阵为存储结构的图,可以通过遍历矩阵中的元素来实现 DFS 和 BFS 遍历。其中,矩阵中的每个元素表示对应两个顶点之间的边,值为 1 表示存在边,值为 0 表示不存在边。
DFS 遍历:
1. 从起点开始,将起点标记为已访问。
2. 遍历当前节点的所有邻居节点,如果邻居节点未访问,则递归访问邻居节点。
3. 遍历完所有邻居节点后,回溯到上一层节点,继续遍历其未访问过的邻居节点。
4. 重复步骤 2 和 3,直到遍历完所有节点。
具体实现可以参考以下代码:
```python
def dfs(graph, start, visited):
visited[start] = True
print(start, end=' ')
for i in range(len(graph)):
if graph[start][i] == 1 and not visited[i]:
dfs(graph, i, visited)
# 示例代码:
graph = [[0,1,1,0],[1,0,0,1],[1,0,0,1],[0,1,1,0]]
visited = [False] * len(graph)
dfs(graph, 0, visited)
```
BFS 遍历:
1. 将起点加入队列中,并标记为已访问。
2. 队列不为空时,弹出队首元素,遍历其所有邻居节点,如果邻居节点未访问,则将其加入队列中,并标记为已访问。
3. 重复步骤 2,直到队列为空。
具体实现可以参考以下代码:
```python
from collections import deque
def bfs(graph, start, visited):
queue = deque([start])
visited[start] = True
while queue:
node = queue.popleft()
print(node, end=' ')
for i in range(len(graph)):
if graph[node][i] == 1 and not visited[i]:
queue.append(i)
visited[i] = True
# 示例代码:
graph = [[0,1,1,0],[1,0,0,1],[1,0,0,1],[0,1,1,0]]
visited = [False] * len(graph)
bfs(graph, 0, visited)
```
阅读全文