这篇专栏记录的是图的广度优先搜索算法(BFS)。(完整代码在最下面)
存储图,首先要定义边、顶点、图的结构体。
//边
typedef struct Edge{
int adj; //邻接点对应的的下标
Edge *next; //指向下一个结点
}Edge;
//顶点
typedef struct{
int data; //顶点信息
Edge *first; //指向第一个邻接点
}Node;
//图
typedef struct{
Node Node[15]; //顶点
int numVertex, numEdge; //顶点数,边数
}Graph;
由于访问节点不能重复,因此要定义一个数组来标记该顶点是否已经访问。
bool BFSvisited[50]; //标记结点是否被访问过
与深度优先搜索(DFS)不一样的是,广度优先搜索(BFS)用到了队列,因此要加上队列的头文件。
#include <queue> //头文件
创建的图和存储图对应的邻接表如图所示。
完整代码:
#include <iostream>
#include <queue>
using namespace std;
bool BFSvisited[50]; //标记结点是否被访问过
//边
typedef struct Edge{
int adj; //邻接点对应的的下标
Edge *next; //指向下一个结点
}Edge;
//顶点
typedef struct{
int data; //顶点信息
Edge *first; //指向第一个邻接点