📜  使用邻接矩阵实现BFS(1)

📅  最后修改于: 2023-12-03 15:22:27.151000             🧑  作者: Mango

使用邻接矩阵实现 BFS

BFS(广度优先搜索)是图论中的一种算法,用于遍历图数据结构。该算法从图中的某个顶点开始遍历,逐层访问与起始顶点距离为 $k$ 的所有未访问过的顶点,直到遍历整个图。BFS 通常使用队列循环实现。

邻接矩阵是表示无向图或有向图的一种方法,它是一个 $n\times n$ 的矩阵,其中第 $i$ 行第 $j$ 列的元素为 $1$ 表示顶点 $i$ 和顶点 $j$ 之间有边,为 $0$ 表示没有边。对于无向图,邻接矩阵是一个对称矩阵。

邻接矩阵可用于实现 BFS 算法。具体实现方法如下:

  1. 初始化邻接矩阵 $G$ 和访问标记数组 $visited$,将所有节点的访问状态设置为未访问。

  2. 定义一个队列 $queue$,将起始节点 $s$ 添加到队列中。

  3. 对于队列 $queue$ 中的每个节点 $v$,遍历其邻居节点并将其添加到队列中,同时将其访问状态设置为已访问。

  4. 重复步骤 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 的方法,该方法适用于稠密图,即边数接近于节点数的图。对于稀疏图,可以使用邻接表来表示图结构,实现类似的遍历操作。