📅  最后修改于: 2023-12-03 15:22:27.151000             🧑  作者: Mango
BFS(广度优先搜索)是图论中的一种算法,用于遍历图数据结构。该算法从图中的某个顶点开始遍历,逐层访问与起始顶点距离为 $k$ 的所有未访问过的顶点,直到遍历整个图。BFS 通常使用队列循环实现。
邻接矩阵是表示无向图或有向图的一种方法,它是一个 $n\times n$ 的矩阵,其中第 $i$ 行第 $j$ 列的元素为 $1$ 表示顶点 $i$ 和顶点 $j$ 之间有边,为 $0$ 表示没有边。对于无向图,邻接矩阵是一个对称矩阵。
邻接矩阵可用于实现 BFS 算法。具体实现方法如下:
初始化邻接矩阵 $G$ 和访问标记数组 $visited$,将所有节点的访问状态设置为未访问。
定义一个队列 $queue$,将起始节点 $s$ 添加到队列中。
对于队列 $queue$ 中的每个节点 $v$,遍历其邻居节点并将其添加到队列中,同时将其访问状态设置为已访问。
重复步骤 3 直到队列为空,遍历结束。
下面是使用 Python 语言实现 BFS 算法的代码,其中邻接矩阵以列表形式表示:
def bfs(graph, start):
# 初始化访问标记数组,并将起始节点添加到队列中
visited = [False] * len(graph)
queue = [start]
visited[start] = True
while queue:
# 对于队列中的每个节点,遍历其邻居节点并加入队列
cur_node = queue.pop(0)
print(cur_node)
for neighbor in range(len(graph)):
if graph[cur_node][neighbor] and not visited[neighbor]:
queue.append(neighbor)
visited[neighbor] = True
针对性测试:
# 测试代码
graph = [[0, 1, 1, 0, 0],
[1, 0, 1, 1, 0],
[1, 1, 0, 1, 1],
[0, 1, 1, 0, 1],
[0, 0, 1, 1, 0]]
bfs(graph, 0)
输出结果:
0
1
2
3
4
以上是使用邻接矩阵实现 BFS 的方法,该方法适用于稠密图,即边数接近于节点数的图。对于稀疏图,可以使用邻接表来表示图结构,实现类似的遍历操作。