图的广度优先搜索类似于树的按层遍历,遍历过程中要用到队列(因为队列中的元素为先进先出),BFS的思想很简单,以下给出完整的代码
#include <iostream>
typedef char InfoType;
typedef char VertexType;
typedef char QElemType;
#define ERROR -1;
#define OK 1;
bool visited[20];
using namespace std;
typedef struct Qnode{
QElemType data;
struct Qnode *next;
}Qnode,*QueuePtr;
typedef struct{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
typedef struct ArcNode{
int adjvex; //该弧所依附的结点的位置编号
struct ArcNode *nextarc; //指向下一条弧的指针
InfoType *info; //指向存储弧的信息的指针
}ArcNode;
typedef struct VNode{
ArcNode *firstarc; //依附于该结点的第一条弧
VertexType data; //节点信息
}Vnode,AdjList[20];
typedef struct{
int vexnum,arcnum; //图的结点个数和弧的个数
AdjList vertices; //存放图的结点的位置向量
}ALGraph;
void InitQueue(LinkQueue &Q){
Q.rear=Q.front=(QueuePtr)mall