广度优先遍历:
与深度优先遍历不同,广度优先遍历还需要一个辅助队列,用来按顺序存储遍历过的顶点以便出队的顶点总是先被遍历的顶点。
以该图为例:
代码如下:
#include<stdio.h>
#define MVNum 100
typedef char OtherInfo;
typedef char VerTexType;
//邻接表存储结构
typedef struct ArcNode //边结点
{
int adjvex;
struct ArcNode *nextarc;
OtherInfo info;
}ArcNode;
typedef struct VNode //顶点信息
{
VerTexType data;
ArcNode *firstarc;
}VNode, AdjList[MVNum];
typedef struct //邻接表
{
AdjList vertices;
int vexnum, arcnum;
}ALGraph;
int LocateVex(ALGraph G, char v);
void LinkAL(ALGraph &G, int i, int j);
//邻接表创建无向图
void CreateUDG(ALGraph &G)
{
G.vexnum = 8; //输入总顶点数和边数
G.arcnum = 9;
G.vertices[0].data = 'v1'; //输入顶点信息
G.vertices[0].firstarc = NULL;
G.vertices[1].data = 'v2';
G.vertices[1].firstarc = NULL;
G.vertices[2].data = 'v3';
G.vertices[2].firstarc = NULL;
G.vertices[3].data = 'v4';
G.vertices[3].firstarc = NULL;
G.vertices[4].data = &