目录
1、广度优先(BFS)
算法思想
图的广度优先遍历(BFS)是一种遍历图的算法,其思想是从起始顶点开始遍历图,先访问起始顶点的所有直接邻居,然后遍历这些邻居的直接邻居,以此类推,直到遍历完整个图。
BFS算法需要使用一个队列来保存已经遍历过但还未访问其邻接顶点。具体步骤如下:
- 将起始顶点加入队列中,并标记为已访问。
- 从队列中取出一个顶点V,并依次访问V的所有未被访问的邻接顶点,并将这些邻接顶点加入队列中,并标记为已访问。
- 重复步骤2,直到队列为空。
广度优先生成树
广度优先搜索(BFS)可以用来生成一棵图的广度优先生成树(BFS树),该树的根节点为起始节点,其余节点按照宽度优先的顺序依次加入。BFS树可以用来解决最短路径问题,以及其他需要按照距离或层次访问节点的问题。
具体的实现步骤如下:
- 初始化BFS树,将起始节点加入树中。
- 将起始节点加入待访问队列。
- 对于队列中的每个节点,依次遍历其所有邻居节点。
- 对于每个邻居节点,如果该节点还未加入BFS树,则将其加入,并将该邻居节点的父节点设为当前节点。
- 将已访问的节点从队列中移除。
- 重复步骤3-5,直到队列为空。
知识树
代码实现
下面是C语言实现BFS的示例代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXV 100 // 最大顶点数
typedef struct {
int edges[MAXV][MAXV]; // 邻接矩阵
int n; // 顶点数
} Graph;
typedef struct {
int data[MAXV];
int front, rear;
} Queue;
in