无向连通图,采用邻接矩阵作为图的存储结构,完成图的 dfs (深度优先遍历)和 bfs (
时间: 2023-07-23 10:04:28 浏览: 172
广度优先遍历)算法。
邻接矩阵是一种基于矩阵的图形表示方法,其中每个节点都表示为矩阵中的一个位置,并且矩阵中的每个元素表示两个节点之间是否存在边。对于无向图,邻接矩阵是对称的(即,矩阵中的每个元素 [i][j] 等于 [j][i]),因为边是双向的。
深度优先遍历是一种遍历图形结构的方法,它从一个起始节点开始,沿着路径尽可能深入地访问每个节点,直到到达没有未访问的相邻节点的节点,然后回溯到最近的未访问节点并继续进行。
广度优先遍历是一种遍历图形结构的方法,它从一个起始节点开始,首先访问所有的直接相邻节点,然后访问所有的相邻节点的相邻节点,以此类推,直到所有节点都被访问。
下面是使用邻接矩阵实现深度优先遍历和广度优先遍历的示例代码:
```python
# 定义一个邻接矩阵表示图形结构
graph = [[0, 1, 1, 0, 0],
[1, 0, 0, 1, 1],
[1, 0, 0, 1, 0],
[0, 1, 1, 0, 1],
[0, 1, 0, 1, 0]]
# 深度优先遍历函数
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start)
for neighbor in range(len(graph[start])):
if graph[start][neighbor] and neighbor not in visited:
dfs(graph, neighbor, visited)
# 广度优先遍历函数
def bfs(graph, start):
visited, queue = set(), [start]
visited.add(start)
while queue:
vertex = queue.pop(0)
print(vertex)
for neighbor in range(len(graph[vertex])):
if graph[vertex][neighbor] and neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
# 调用 dfs 和 bfs 函数进行遍历
dfs(graph, 0)
bfs(graph, 0)
```
在上面的示例中,我们定义了一个邻接矩阵表示图形结构,并使用该矩阵作为参数调用 dfs 和 bfs 函数以遍历图形结构。在 dfs 函数中,我们使用递归方式访问每个节点,并使用 set() 来跟踪已经访问的节点。在 bfs 函数中,我们使用队列来跟踪要访问的节点,以确保我们按照广度优先的顺序遍历节点。
阅读全文