图的邻接矩阵存储及遍历

图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:


我们来看一个实例,图7-4-2的左图就是一个无向图。


我们再来看一个有向图样例,如图7-4-3所示的左图。


所提供的引用内容中未提及头歌平台邻接矩阵存储遍历操作第四关的相关内容,因此无法根据引用给出该关卡的解决方案。不过,一般来说,邻接矩阵存储遍历操作包含以下关键要点: ### 邻接矩阵存储 邻接矩阵通过一个一维数组存储顶点,一个二维数组存储顶点之间的相邻关系。对于一个顶点数为 n 的,其邻接矩阵是 n×n 的方阵。对于不带权的,二维数组 `a[i][j] = 1` 代表 i 和 j 相连,`a[i][j] = 0` 代表不相连;对于带权的,`a[i][j] = k` 代表 i 和 j 之间的权为 k [^2]。 以下是一个简单的邻接矩阵存储的 Python 代码示例: ```python class Graph: def __init__(self, num_vertices): self.num_vertices = num_vertices self.adj_matrix = [[0] * num_vertices for _ in range(num_vertices)] def add_edge(self, i, j, weight=1): self.adj_matrix[i][j] = weight self.adj_matrix[j][i] = weight # 无向 # 创建一个包含 4 个顶点的 g = Graph(4) # 添加边 g.add_edge(0, 1) g.add_edge(0, 2) g.add_edge(1, 3) ``` ### 遍历操作 常见的遍历算法有深度优先搜索(DFS)和广度优先搜索(BFS)。 #### 深度优先搜索(DFS) ```python def dfs(graph, start, visited=None): if visited is None: visited = set() if start not in visited: print(start, end=' ') visited.add(start) for i in range(len(graph.adj_matrix[start])): if graph.adj_matrix[start][i] == 1 and i not in visited: dfs(graph, i, visited) # 调用 DFS 遍历 dfs(g, 0) ``` #### 广度优先搜索(BFS) ```python from collections import deque def bfs(graph, start): visited = set() queue = deque([start]) visited.add(start) while queue: vertex = queue.popleft() print(vertex, end=' ') for i in range(len(graph.adj_matrix[vertex])): if graph.adj_matrix[vertex][i] == 1 and i not in visited: queue.append(i) visited.add(i) # 调用 BFS 遍历 bfs(g, 0) ``` ### 通关指南思路 在头歌平台完成邻接矩阵存储遍历操作第四关时,需要确保: 1. 正确实现邻接矩阵存储结构。 2. 能够根据题目要求进行的初始化,添加边等操作。 3. 实现正确的遍历算法(DFS 或 BFS),并输出符合题目要求的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值